Java RMI - 从接口/ $ Proxy转换为原始类?

时间:2011-12-17 21:09:49

标签: java rmi

我有一些使用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);

abc def 是远程对象!

有没有办法,如何调用" packageMethod"?非常感谢你, Mike S.(cz)

1 个答案:

答案 0 :(得分:1)

你做不到。您必须将其强制转换为远程接口。 不是原始类。这是一个代理人。如果有要调用的方法,则必须在远程接口中定义该方法。