我有一些使用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”?非常感谢你,
迈克·S(cz)

最佳答案

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

关于java - Java RMI-从接口(interface)/$ Proxy转换为原始类?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8547942/

10-08 22:30