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