Частное поле в Java-аннотациях - PullRequest
2 голосов
/ 30 июля 2010

Мое приложение 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 голосов
/ 30 июля 2010

Это не совсем отвечает на вопрос, но я не вижу смысла использовать константу для самого запроса. Я бы просто использовал что-то вроде этого:

@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 при вызове запроса), а константа делает ваш код более устойчивым: он будет сопротивляться опечатки и рефакторинг. Преимущества очевидны.

Однако я лично не вижу реального преимущества в использовании константы для самого запроса.

0 голосов
/ 30 июля 2010

Это странная вещь, но я бы предположил, что это потому, что поле private, но доступ к нему осуществляется с использованием имени класса впереди.Компилятор должен понимать, что на него ссылаются из того же класса, но, очевидно, нет.

Итак, измените private на protected (не элегантно, но должно работать)

Вы также можете попробовать обновить JDK (и, следовательно, javac).Обратите внимание, что eclipse использует свой собственный компилятор (не javac)

...