0

我有两个包 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.

为了更清楚:

  • 包 1:(mg.networktest.server) 有一个带有 ChatMessage 类的 Network.java。
  • 包 2:(mg.networktest)需要包 1 中的 ChatMessage 类。
  • 包2:(mg.networktest)不能做:import mg.network.server.*;
  • 如何在包 2 (mg.networktest) 中访问包 1 (mg.networktest.server) 中的 ChatMessage 类?
4

2 回答 2

2

如果您的 import 语句导致编译错误,请验证以下内容:

  • 您使用了正确的语法。对于单个类型名称,请使用语法import TypeName;. 要从包或类范围按需导入类型名称,请使用语法import PackageOrTypeName.*;.
  • 您已命名当前存在的包和/或类。检查路径,并检查拼写。
  • 如果导入的类在不同的 Eclipse 项目或库中,请验证它是否在导入类的项目的构建路径上。
  • 重建包含导入和导入类的项目。如果您自动启用了构建,通常这不是必需的。
于 2014-09-21T08:49:31.747 回答
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?以及那里找到其他方法来创建内部类的新实例的答案。

附言

您还可以使内部类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();
  }
}
于 2014-09-21T08:50:02.967 回答