我正在使用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;