0

是否存在类似于ObjectJava 中的泛型类型,允许为其设置不同类型的值?

<typeDescription>
    <name>com.example.Annotation</name>
    <description></description>
    <supertypeName>uima.tcas.Annotation</supertypeName>
    <features>
        <featureDescription>
            <name>exampleFeature</name>
            <description>An example feature</description>
            <rangeTypeName>uima.cas.Generic</rangeTypeName>
        </featureDescription>
    </features>
</typeDescription>

我尝试将以下内容放入<rangeTypeName>

  • java.lang.ObjectObject这不起作用,我在尝试使用 JCasGen 生成代码时收到以下消息:

    JCasGen 警告:**实例化 CAS 类型系统时发生资源初始​​化错误。继续,但可能生成不正确。由“未定义类型“对象”引起,在类型“com.example.Annotation”上声明的特征“exampleFeature”中引用。

  • uima.cas.TOP这会生成代码,但是当我尝试setExampleField()通过传递它来调用该方法时会出现错误,int或者String因为它无法将它们转换为 TOP 类型。

4

1 回答 1

3

uima.cas.TOP是 UIMA 的Object等效类型。但这与您的预期略有不同。UIMA 使用两个概念进行操作:1) FeatureStructure,2)原始类型(int、boolean 等和 String!)。如果将特征的范围设置为 TOP,它可以接受任何类型的特征结构(即任何从 TOP 继承的特征),但不能接受任何原始类型 - 这里没有自动装箱。如果您将范围设置为原始类型,那么它将只接受该类型。

解决方法可以是定义自定义类型,例如 FSInt、FSString、FSBoolean,它们继承自 TOP,并且具有相应类型(int、String、boolean)的“值”特性。然后,您可以在该 FS 中设置值并将其分配给范围为 TOP 的功能。

注意:我目前是 Apache UIMA 项目的提交者。

于 2014-01-03T02:06:38.750 回答