我想找出一个警告的来源:
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“的评论
嗯..。也许我的回答太匆忙,但我不太明白.但是,当您编译了一个用A注释的类C1时,您可以将C1放在C2的编译(并运行)类路径中,而不需要将A放入C2 classpath.You中,只会得到警告,而A就会被忽略(这是正确的:注释只有在特定的上下文中才有意义,而在C2上下文A中没有意义)。 我刚刚对包含javax.persistence注释的JAR编译了一个示例类X(但没有将jpa.jar放在编译器类路径中): 斯特拉尔:/tmp> javac it/tidalwave/catalog/persistence/CategoryPB.class(it/tidalwave/catalog/persistence:CategoryPB.class):-classpath it-tidalwave- X.java X.java警告:无法找到类型' javax.persistence.Table ':javax.persistence.Table未找到的类文件中的注释方法‘-classpath():无法找到类型中的注释方法'length()’‘javax.sistence.Column’:未找到it/tidalwave/catalog/persistence/CategoryPB.class(it/tidalwave/catalog/persistence:CategoryPB.class):警告:无法找到“javax.persistence.Column”类型中的注释方法'javax.persistence.Column‘的javax.persistence.Column类文件 等等。只是警告,编译是成功的。
所以我认为,这只是一个注释/类路径问题。
发布于 2010-07-01 01:00:39
我对XStream并不十分熟悉--看上去相当漂亮--但是根据您所使用的注释的性质(以及注释教程),我认为您的things上有太多的注释。从我的快速遍历中,别名注释将完全限定的对象名称转换为更合适的XML元素名称(对象名称是默认的)。仅使用集合内容类型的类名,隐式集合将不使用任何字段名。如果希望XML中的集合元素具有不同的名称,则使用itemFieldName属性。
我的建议是尝试使用相同的代码,只需从@XStreamAlias中删除things注释,并查看是否修复了它。此外,如果它有效,我认为您可能希望在itemFieldName中更改该值,因为就目前情况而言,您将有一个名为things的元素集合--我认为使用thing可能会更好。
希望这能有所帮助!
https://stackoverflow.com/questions/3153831
复制相似问题