我有两个包mg.networktest和mg.netwworktest.server,它们都需要访问同一个类来注册/序列化需要通过网络发送的类。我认为最好的做法是在服务器包上创建它,并将其包含在客户端中。
但是,我无法正确引用类。我还试着添加了另一个包裹,但我认为这是不允许的。但它就是不认识我的另一个包裹。下面的导入都得到The import mg.networktest.server cannot be resolved
。我可以把它拿到import mg.networktest.*;
,但它只是引用了自己。
import mg.networktest.server; //This is the exact package
import mg.networktest.server.Network; //This is the physical class/.java name
import mg.networktest.server.Network.ChatMessage; //This is one of the classes inside the .java that needs to be included.
更清楚的是:
- 包1:(mg.networktest.server)有一个Network.java,类为ChatMessage
- 包2:(mg.networktest)需要包1中的类ChatMessage
- 包2:(mg.networktest)无法执行:
import mg.network.server.*;
- 如何在包2(mg.networktest)中访问包1(mg.neworktest.server)中的类ChatMessage
如果导入语句导致编译错误,请验证以下内容:
- 你使用了正确的语法。对于单个类型名称,请使用语法
import TypeName;
。要根据需要从包或类作用域导入类型名称,请使用语法import PackageOrTypeName.*;
- 您已命名了当前存在的包和/或类。检查路径,并检查拼写
- 如果导入的类在不同的Eclipse项目或库中,请验证它是否在导入类的项目的构建路径上
- 重新生成包含导入类和导入类的项目。如果启用了自动生成,通常这是不必要的
我试图重建您当前的项目结构。这是我的Network
类和内部类ChatMessage
。
package mg.networktest.server;
public class Network {
public class ChatMessage {
public void message() {
System.out.println("Blub");
}
}
}
这是我的包mg.networktest
中的类,需要ChatMessage
类
package mg.networktest;
import mg.networktest.server.Network;
import mg.networktest.server.Network.ChatMessage;
class NeedChatMessage {
public static void main(String args[]) {
final Network network = new Network();
final ChatMessage chatMessage = network.new ChatMessage();
chatMessage.message();
}
}
您需要导入父类Network
和内部类ChatMessage
才能在此处使用内部类。现在,您需要首先创建父类Network
的一个新实例,以便使用该实例访问内部类。可以检查这个问题是否可以使用Java反射创建嵌套类的实例?以及找到其他方法来创建内部类的新实例的答案。
p.S.
您也可以使内部类ChatMessage
成为静态
public static class ChatMessage {
public void message() {
System.out.println("Blub");
}
}
现在您不再需要Network
类来访问内部类
import mg.networktest.server.Network.ChatMessage;
class NeedChatMessage {
public static void main(String args[]) {
final ChatMessage chatMessage = new ChatMessage();
chatMessage.message();
}
}