我正在使用NetBeans,并将常见类分解为库。我想引用库中的类。通过告诉NetBeans一个项目依赖于另一个项目(后者是Java库项目),我可以很容易地做到这一点。

该库项目称为“ ReVueLib”。我有一个名为“ Stream”的文件夹,并且有一个类“ StreamClient”。以下是重要内容的精简版:

package Stream;
class StreamClient {
    public void StreamClient() {}
};


我还有一个名为“ ReVueServer”的项目,其主要内容如下:

package revueserver;
import Stream.StreamClient;
public class ReVueServer {
    public static void main(String[] args) {
        Class c = StreamClient.class;
        System.out.println(c.getName());
    }
};


现在,如果我运行此命令,它将正常工作并打印出“ Stream.StreamClient”。但是说我想在不导入的情况下引用此类。原因是在另一个项目中,我想将Network.StreamClient子类化为名为StreamClient的类。这将帮助我避免重构大量现有代码。换句话说,我利用名称空间分离的优势来继承和重用旧名称。

不幸的是,如果我取消导入,“ Stream.StreamClient”将不起作用,“ ReVueLib.Stream.StreamClient”或我尝试过的其他任何功能也将不起作用。

我需要使用什么FQCN来引用此库类而不进行“导入”?

最佳答案

包中类的专有名称包括包的全名。 import语句可避免编写前缀,但这是编译时的技巧。这就是为什么您的程序打印全限定名Stream.StreamClient的原因,即使您的程序通过其短名称StreamClient引用了该类。

您始终可以重写程序以对所有类使用全名:

Class c = Stream.StreamClient.class;


甚至

java.lang.Class c = Stream.StreamClient.class;

10-04 19:02