我有两个软件包mg.networktest和mg.networktest.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.
更清楚:
import mg.network.server.*;
。答案 0 :(得分:2)
如果import语句导致编译错误,请验证以下内容:
import TypeName;
。要从包或类范围按需导入类型名称,请使用语法import PackageOrTypeName.*;
。答案 1 :(得分:1)
我尝试重建您当前的项目结构。这是我的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
的新实例,以便使用该实例访问内部类。可以查看此问题Is it possible to create an instance of nested class using Java Reflection?以及那里的答案,以找到创建内部类的新实例的其他方法。
<强> 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();
}
}