2017-02-25 148 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