Java Can';t访问public类中public静态类的public成员(都在一个单独的jar中)
好吧,这是一个满嘴的标题。不过,这让我明白了我的观点。下面是我在jar中的代码要点:Java Can';t访问public类中public静态类的public成员(都在一个单独的jar中),java,android,Java,Android,好吧,这是一个满嘴的标题。不过,这让我明白了我的观点。下面是我在jar中的代码要点: public class NetworkShared { public static class LoginRequest { public String Username; //... 然后,为了访问它,我做了如下操作: NetworkShared.LoginRequest request = new NetworkShared.LoginRequest(); req
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之外,没有其他错误。结论:这似乎是引用JAR的Eclipse刷新问题 它应该会起作用。顶级类隐式地
静态
,因此基本上网络共享。LoginRequest
是识别LoginRequest类的正确方法。你做得对
我的答案不是关于eclipse的问题——而是关于Java的问题——因此,至少您可以消除与Java相关的顾虑
除了您的eclipse可能有一个bug之外(也不是第一个bug),您能在eclipse中编译以下代码吗?您可能已经将原始代码缩减为实际工作的代码
NetworkShared.java
public class NetworkShared {
public static class LoginRequest {
public String Username;
}
}
public class Test {
public static void main(String[] args) {
NetworkShared.LoginRequest o = new NetworkShared.LoginRequest();
o.Username = null;
}
}
Test.java
public class NetworkShared {
public static class LoginRequest {
public String Username;
}
}
public class Test {
public static void main(String[] args) {
NetworkShared.LoginRequest o = new NetworkShared.LoginRequest();
o.Username = null;
}
}
结论:这似乎是引用JAR的Eclipse刷新问题 它应该会起作用。顶级类隐式地
静态
,因此基本上网络共享。LoginRequest
是识别LoginRequest类的正确方法。你做得对
我的答案不是关于eclipse的问题——而是关于Java的问题——因此,至少您可以消除与Java相关的顾虑
除了您的eclipse可能有一个bug之外(也不是第一个bug),您能在eclipse中编译以下代码吗?您可能已经将原始代码缩减为实际工作的代码
NetworkShared.java
public class NetworkShared {
public static class LoginRequest {
public String Username;
}
}
public class Test {
public static void main(String[] args) {
NetworkShared.LoginRequest o = new NetworkShared.LoginRequest();
o.Username = null;
}
}
Test.java
public class NetworkShared {
public static class LoginRequest {
public String Username;
}
}
public class Test {
public static void main(String[] args) {
NetworkShared.LoginRequest o = new NetworkShared.LoginRequest();
o.Username = null;
}
}
您是否可以剪切/粘贴Eclipse给出的确切错误。“NetworkShared.LoginRequest.Username字段不可见”如果右键单击,您是否可以获得有关更改某处可见性的自动修复选项?这是Eclipse的问题。我重新启动了它,一切都很好P我开始期待这个IDE会出现这样的情况……为什么我们从来没有从其他IDE的用户那里听到过这样的问题?那些IDE也有bug。你能不能剪切/粘贴Eclipse给出的确切错误。“NetworkShared.LoginRequest.Username字段不可见”如果你右键单击,你会得到关于更改某个位置可见性的自动修复选项吗?这是Eclipse的问题。我重新启动了它,一切都很好P我开始期待这个IDE会出现这样的情况……为什么我们从来没有从其他IDE的用户那里听到过这样的问题?那些IDE也有漏洞。他的代码确实有效。奇怪的是,如果我将JAR导入到一个新项目中,它就可以正常工作。所以凭直觉,我决定重新启动Eclipse。奇迹般地,问题消失了。似乎Eclipse没有加载新的JAR,因为我以前忘记将成员公开。我确实删除了旧JAR并将其重新添加到项目中,但问题仍然存在。但在重新启动Eclipse之后,一切都很好。谢谢好的——所以很可能是引用的JAR出现了Eclipse刷新问题:)他的代码确实有效。奇怪的是,如果我将JAR导入到一个新项目中,它就可以正常工作。所以凭直觉,我决定重新启动Eclipse。奇迹般地,问题消失了。似乎Eclipse没有加载新的JAR,因为我以前忘记将成员公开。我确实删除了旧JAR并将其重新添加到项目中,但问题仍然存在。但在重新启动Eclipse之后,一切都很好。谢谢好的——很可能是引用的JAR出现了Eclipse刷新问题:)