Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';t访问public类中public静态类的public成员(都在一个单独的jar中)_Java_Android - Fatal编程技术网

Java Can';t访问public类中public静态类的public成员(都在一个单独的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

好吧,这是一个满嘴的标题。不过,这让我明白了我的观点。下面是我在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之外,没有其他错误。

结论:这似乎是引用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刷新问题:)