LocateRegistry.createRegistry()返回什么对象?
问题描述:
我对Java很新,我很想知道这里发生了什么。LocateRegistry.createRegistry()返回什么对象?
有一个类RMIServer,它在它的构造函数中创建一个新的注册表。
public class RMIServer {
private static final int PORT_NUMBER = 1099;
private Registry registry = null;
public RMIServer() {
registry = LocateRegistry.createRegistry(PORT_NUMBER);
}
}
现在,当我看在LocateRegistry
班createRegistry()
方法我可以看到它返回一个接口Registry
public final class LocateRegistry {
private LocateRegistry() {
// compiled code
}
public static Registry createRegistry(int i) throws RemoteException {
// compiled code
}
}
通常我认为应该有返回的类,但即使我看javadoc我无法找到将返回的对象是什么类。
该代码的工作原理应该是这样,现在我只是想知道:这是如何工作的以及如何自行解决这个问题? (授人以鱼,...)
答
按照source code of OpenJDK,它返回的sun.rmi.registry.RegistryImpl
一个实例是一个内部类:
public static Registry createRegistry(int port) throws RemoteException {
return new RegistryImpl(port);
}
公众的Javadoc通常不包括这样的内部类,这可能会从Java平台的一个实现改变到另一个实现。因此,另一个JRE实现理论上可以使用不同的类作为Registry
实现。
有关以sun.*
开头的此类类别的更多详细信息,请参阅this page。
http://docs.oracle.com/javase/7/docs/api/java/rmi/registry/LocateRegistry.html – Li357
在Java中有很多方法比返回接口类型,而不仅仅是RMI方法。显然,实际的对象也具有类的类型,但它不是你的业务。 – EJP