是否存在类似于Java中的Object
的泛型类型,它允许将不同类型的值设置为它?
<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.Object 和对象这不起作用,尝试使用JCasGen生成代码时收到以下消息:
JCasGen警告: ** 资源初始化在实例化CAS类型系统时发生错误。继续,但可能会生成错误。由“未定义类型”对象“引起,在”com.example.Annotation“类型上声明的功能”exampleFeature“中引用。
uima.cas.TOP 这会生成代码,但在我尝试通过setExampleField()
或{int
传递String
方法时会出错。 {1}}因为它无法将它们转换为TOP类型。
答案 0 :(得分:3)
uima.cas.TOP 是UIMA的对象等价类型。但它与您的预期略有不同。 UIMA有两个概念:1) FeatureStructure ,2)原始类型(int,boolean等和String!)。如果你将一个特征的范围设置为TOP,它可以接受任何类型的特征结构(即从TOP继承的任何东西),但不能接受任何原始类型 - 这里没有自动装箱。如果将范围设置为基本类型,则它只接受该类型。
解决方法可能是定义自定义类型,例如FSInt,FSString,FSBoolean,它继承自TOP,并且具有相应类型(int,String,boolean)的“值”特征。然后,您可以设置该FS中的值,并将其分配给范围为TOP的要素。
注意:我目前是Apache UIMA项目的提交者。