2011-06-17 96 views
1

那麼,這是一個標題的一口。儘管如此,它讓我意識到了這一點。這裏是我的代碼的要點,罐內:無法訪問公共類中的公共類的公共類(全部在單獨的jar中)

public class NetworkShared { 
    public static class LoginRequest { 
     public String Username; 
     //... 

然後,要訪問它,我在做這樣的事情:

NetworkShared.LoginRequest request = new NetworkShared.LoginRequest(); 
request.Username = "example"; //this is the problem line 

這是當我嘗試訪問request.Username我有一個問題。 Eclipse說域NetworkShared.LoginRequest.Username是不可見的。我很困惑,因爲它一直公開。 Java不是我的主要語言,所以我可能會錯過一些東西。有人知道嗎?

編輯:我可能會補充說,這在Android上。 NetworkShared在它自己的JAR中,我已經將它添加到構建路徑中。除了訪問request.Username之外沒有別的錯誤。

+2

你能剪切/粘貼確切的錯誤比如Eclipse給它。 – aioobe 2011-06-17 05:40:44

+0

「NetworkShared.LoginRequest.Username字段不可見」 – 2011-06-17 05:42:57

+0

如果右鍵單擊,是否有關於在某處更改可見性的自動修復選項? – aioobe 2011-06-17 05:44:06

回答

1

結論:看起來像這是帶引用JAR的Eclipse刷新問題。

它應該工作。頂級類隱含地爲static,所以基本上NetworkShared.LoginRequest是識別LoginRequest類的正確方法。你正在做的是正確的。

我的回答不是針對你的eclipse問題 - 這是你的Java問題 - 所以至少你可以避免你的Java相關的煩惱。

事實上,您的eclipse可能有一個錯誤(不會是第一個),請問您可以在eclipse中編譯下面的代碼嗎?您可能已將原始代碼剪裁成實際可用的東西。

NetworkShared.java

public class NetworkShared { 
    public static class LoginRequest { 
     public String Username; 
    } 
} 

Test.java

public class Test { 
    public static void main(String[] args) { 
     NetworkShared.LoginRequest o = new NetworkShared.LoginRequest(); 
     o.Username = null; 
    } 
} 
+1

他的代碼確實有效。奇怪的是,如果我將JAR導入到一個新項目中,它工作正常。所以在預感上,我決定重新啓動Eclipse。奇蹟般地,問題沒有了。看起來Eclipse並沒有加載新的JAR,因爲我之前忘記了讓該成員公開。我沒有刪除舊的JAR並重新添加到項目中,但問題依然存在。儘管重新啓動Eclipse,但一切都很好。謝謝! – 2011-06-17 05:49:45

+0

好的 - 所以很可能是引用JAR的Eclipse刷新問題:) – Nick 2011-06-17 05:52:37