2017-02-27 21 views
-2

我一直在通過一個非常簡單的例子來設置一個遠程方法調用應用程序,並且在通過客戶端代碼時,我無法理解如下所示的一個代碼。當然,我的知識存在差距,因爲我通過界面不能有對象unless you use Anonymous Inner Class。所以在下面的代碼中,我們是如何創建遠程接口的對象的。如果我不得不猜測,這似乎是某種類型的演員。Naming.lookup()是做什麼的?

import java.rmi.*; 
public class HelloClient { 
    public static void main(String args[]) { 
    try { 
    if (args.length < 0) { 
     System.err.println("usage: java HelloClient string …\n"); 
     System.exit(1); 
    } 
HelloInterface hello = (HelloInterface)Naming.lookup("//localhost/Hello");   

這最後一行是我無法理解的(HelloInterface)部分究竟發生了什麼?

+0

這裏沒有J2EE。 – EJP

回答

-1

HelloInterface hello =(HelloInterface)Naming.lookup(「// localhost/Hello」);

這是什麼意思?

它基本上是在名爲// localhost/Hello的服務器對象池中查找對象。這稱爲JNDI名稱

根據服務器的類型,可以在服務器配置文件中配置此名稱。

+0

名稱爲「Hello」,這裏沒有JNDI。 – EJP

+0

現在你只是錯誤地引用了OP的源代碼。你似乎只是在這裏猜測。 – EJP

3
HelloInterface hello = (HelloInterface)Naming.lookup("//localhost/Hello"); 
  • Naming.lookup()調用檢查RMI註冊在本地主機的名稱「你好」下運行的結合。
  • 它返回一個Object,必須將其轉換爲您期望它的任何遠程接口。
  • 然後,您可以使用該對象來調用界面中定義的遠程方法。

我以爲一個接口不能有對象,除非你使用匿名內部類。

我不知道你在說什麼。任何類都可以實現一個接口。這是相當基本的。

所以下面我們是如何創建遠程接口的對象

我們沒有的代碼。我們將它作爲服務器放置的註冊表的返回值。

這似乎是某種類型的演員給我,如果我不得不猜測。

無需猜測。這正是它的原因。只有一種類型的類型轉換,這就是你如何編寫它。這也是相當基本的。

+0

但關於這個: 我不知道你在說什麼在這裏。任何類都可以實現一個接口。這是相當基本的。我的意思是接口沒有直接的對象,只能通過類。 –

+0

這正是我所說的。我不明白你爲什麼認爲這是一個問題。這不是..JDK中有很多方法返回接口類型,而不僅僅是在RMI中,並且隱藏了實際的對象類。 – EJP