2010-07-30 75 views
2

我的jboss seam應用程序在eclipse中編譯時沒有錯誤。當我嘗試手動編譯我有一個錯誤java註釋中的私有字段

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> 

我如何編譯? p.s.對不起我的工作)

+0

歡迎來到SO。我猜「手動」你的意思是編譯與螞蟻?你可以進入Eclipse的首選項並從那裏發佈編譯器設置嗎? – 2010-07-30 08:40:56

+0

是的。 「手動」意味着用ant編譯。我在eclipse中找不到編譯器設置。它在哪裏? – dimafeng 2010-07-30 08:57:48

+0

編譯器設置不會太重要,因爲eclipse使用它自己的解析器和編譯器進程,它可以愉快地編譯Sun的javac扼流器的一些比較晦澀的構造。在這種情況下,大多數問題都是Java 1.5代碼(如泛型或註釋)。 – Stroboskop 2010-07-30 10:52:26

回答

0

這是一件奇怪的事情,但我想這是因爲該字段是private,但使用前面的類名訪問。編譯器應該認識到它是從同一個類引用的,但它顯然不是。

所以,改變privateprotected(不優雅,但應該工作)

您也可以嘗試升級JDK(因此javac的)。請注意,eclipse使用自己的編譯器(不是javac)

+0

或'query = CurrentModuleState.this.STATE_QUERY'也許? – 2010-07-30 08:44:27

+0

越短,越好 – Bozho 2010-07-30 08:48:26

+0

@dimafeng _how_它不起作用?這是相同的編譯錯誤?一個不同的? – Bozho 2010-07-30 09:06:35

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註釋中)引用它,而常量使您的代碼更健壯:它將抵制輸入錯誤和重構。優點是顯而易見的。

但是,我個人並沒有看到使用查詢本身的常量的任何真正的優勢。

+0

謝謝。我們決定在公共界面中移動所有查詢。 – dimafeng 2010-07-30 11:11:14