0

我正在尝试追踪警告的来源:

warning: Cannot find annotation method 'itemFieldName()' in type 'com.thoughtworks.xstream.annotations.XStreamImplicit'

相关代码为:

@XStreamAlias("things")
@XStreamImplicit(itemFieldName = "things")
private List<Thing> things;

查看 XStream JAR,我看到:

@java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
@java.lang.annotation.Target({java.lang.annotation.ElementType.FIELD})
public static @interface XStreamImplicit {

    java.lang.String itemFieldName() default "";
}

所以我不确定为什么会收到警告。它似乎没有引起问题,但我在编译器输出中得到了一堆这些,我想整理它们。

编辑:做了更多的挖掘,发现了这个:http: //java.dzone.com/articles/when-good-annotations-go-bad看看“Fabrizio”的评论

嗯....也许我也很着急回答,我不太明白...但是AFAIK当你编译了一个用A注释的类C1时,你可以把C1放在编译中(并运行) C2 的类路径,无需将 A 放入 C2 类路径。您只会收到警告,而 A 会被忽略(因为这样做是正确的:注释仅在特定上下文中有意义,而在 C2 上下文中,A 是无意义的)。

我刚刚仔细检查,针对包含 javax.persistence 注释的 JAR 编译示例类 X(但没有将 jpa.jar 放在编译器类路径中):

istral:/tmp> javac -classpath it-tidalwave-catalog.jar X.java it/tidalwave/catalog/persistence/CategoryPB.class(it/tidalwave/catalog/persistence:CategoryPB.class):警告:找不到注释方法' 'javax.persistence.Table' 类型中的名称()':找不到 javax.persistence.Table 的类文件/tidalwave/catalog/persistence/CategoryPB.class(it/tidalwave/catalog/persistence:CategoryPB.class):警告:在“javax.persistence.Column”类型中找不到注释方法“length()”:找不到 javax.persistence.Column 的类文件/tidalwave/catalog/persistence/CategoryPB.class(it/tidalwave/catalog/persistence: CategoryPB.class):警告:在“javax.persistence.Column”类型中找不到注释方法“name()”

等等...只是警告,编译成功。

所以我认为,这只是一个注释/类路径问题。

4

1 回答 1

0

我对 XStream 不是很熟悉 - 看起来很漂亮 - 但根据您使用的注释的性质(以及注释教程),我认为您的things. 根据我的快速回顾,别名注释将完全限定的对象名称转换为更合适的 XML 元素名称(对象名称是默认值)。隐式集合将在没有任何字段名的情况下工作,只需使用集合内容类型的类名。如果您希望 XML 中的集合元素具有不同的名称,那就是您使用该itemFieldName属性的时候。

我的建议是尝试使用相同的代码,只需从 中删除@XStreamAlias注释things,看看是否可以修复它。另外,如果它有效,我认为您可能想要更改 中的值itemFieldName,因为就目前而言,您将拥有一个名为的元素集合things- 我认为使用thing代替可能会更好。

希望这可以帮助!

于 2010-07-01T01:00:39.593 回答