2017-02-25 149 views
1

我对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); 
    } 
} 

现在,当我看在LocateRegistrycreateRegistry()方法我可以看到它返回一个接口Registry

public final class LocateRegistry { 

    private LocateRegistry() { 
     // compiled code 
    } 

    public static Registry createRegistry(int i) throws RemoteException { 
     // compiled code 
    } 
} 

通常我认为应该有返回的类,但即使我看javadoc我无法找到将返回的对象是什么类。

该代码的工作原理应该是这样,现在我只是想知道:这是如何工作的以及如何自行解决这个问题? (授人以鱼,...)

+0

http://docs.oracle.com/javase/7/docs/api/java/rmi/registry/LocateRegistry.html – Li357

+0

在Java中有很多方法比返回接口类型,而不仅仅是RMI方法。显然,实际的对象也具有类的类型,但它不是你的业务。 – EJP

回答

1

按照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