Java RMI - приведение интерфейса / $ Proxy к исходному классу? - PullRequest
1 голос
/ 18 декабря 2011

У меня есть сервер и клиент, использующий 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"? Большое спасибо, Майк С. (cz)

1 Ответ

1 голос
/ 19 февраля 2014

Вы не можете.Вы должны привести его к удаленному интерфейсу.Это не оригинальный класс.Это прокси.Если есть метод, который вы хотите вызвать, этот метод должен быть определен в удаленном интерфейсе.

...