2011-12-17 64 views
1

我有一些使用Java RMI的服務器和客戶端。 爲了簡化,在服務器上存在返回Task(iTask)和接收iTask的方法。 例如,服務器:

interface iTask extends Remote{ 
    void publicMethod(); 
} 

class Task extends UnicastRemoteObject implements iTask 
{ 
    public void publicMethod(){...} //interface 
    void packageMethod(){...} //not interface 
} 

,在一些方法(也無所謂在什麼)類:

iTask getTask(){ 
    return new Task(); 
} 

void doSomethingSecret(iTask task){ 
    Task needthis = (Task)task; //BOOM! ClassCastException: $Proxy9 cannot be cast to nextQuest.server.Task 
    needthis.packageMethod(); // I need this... 
} 

在客戶端,我做到這

iTask tsk = abc.getTask() 
def.doSomethingSecret(tsk); 

ABCdef是遠程對象!

有沒有辦法,如何調用「packageMethod」?非常感謝, Mike S.(cz)

回答

1

你不能。您必須將其投射到遠程接口。它不是原來的類。它是一個代理。如果您想調用某個方法,則必須在遠程接口中定義該方法。