2011-06-17 87 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