java注释中的私有字段

时间:2010-07-30 08:16:23

标签: java annotations javac

我的jboss seam应用程序在eclipse中编译时没有错误。当我尝试手动编译时,我遇到了错误

  

STATE_QUERY拥有私人访问权限

@NamedQueries({
    @NamedQuery(name = CurrentModuleState.FIND_MODULE_STATE,
         query = CurrentModuleState.STATE_QUERY)
})
public class CurrentModuleState implements java.io.Serializable {
        ...
        private static final String STATE_QUERY = "...";

蚂蚁:

<javac encoding="cp1251" srcdir="${src-dir}" destdir="${compile-dir}"
            executable="${javac-path}"
            compiler="javac1.6">
    <classpath refid="lib.classpath" />
    <classpath refid="jboss-lib.classpath" />
</javac>

我如何编译? 附:对不起我的意见)

2 个答案:

答案 0 :(得分:0)

这是一件奇怪的事情,但我认为这是因为该字段是private,但可以使用前面的类名来访问。编译器应该意识到它是从同一个类引用的,但显然不是。

所以,将private更改为protected(不优雅,但应该有效)

您也可以尝试升级JDK(以及javac)。请注意,eclipse使用自己的编译器(而不是javac)

答案 1 :(得分:0)

这并没有完全回答这个问题,但我并没有真正意识到为查询本身使用常量。我会用这样的东西:

@Entity
@NamedQuery(name = Customer.FIND_ALL, query="select c from Customer c"),
public class Customer {
    public static final String FIND_ALL = "Customer.findAll";
    // Attributes, constructors, getters, setters
}

常量为public因为...我希望能够用它来执行查询:

Query query = em.createNamedQuery(Customer.FIND_ALL);
List<Customer> customers = query.getResultList();

使用常量作为查询名称是有意义的,因为您将从多个位置(从@NamedQuery注释中调用查询时)引用它,并且常量使您的代码更健壮:它将抵制打字错误和重构。优势显而易见。

但是,我个人认为查询本身使用常量没有任何实际优势。