从javase api 8开始,不推荐使用rmic
。因此,最好通过将对象导出为以下方式来动态生成stubs
:
子类化UnicastRemoteObject
并调用UnicastRemoteObject()
构造函数。
子类化UnicastRemoteObject
并调用UnicastRemoteObject(port)
构造函数。
因此,我首先调用了UnicastRemoteObject(port)
构造函数,但出现了编译错误:no suitable constructor found for UnicastRemoteObject(int)
然后,我尝试调用UnicastRemoteObject()
构造函数,仍然遇到相同的编译错误。可能出什么问题了?
编辑:我的代码:
import java.rmi.*;
import java.rmi.server.*;
public class MyServer extends UnicastRemoteObject implements MyRemote {
MyServer()throws RemoteException {
new UnicastRemoteObject(5000);
}
//Other methods...
}
确切的引用错误:
找不到适合UnicastRemoteObject(int)的构造函数
构造函数java.rmi.server.UnicastRemoteObject.UnicastRemoteObject()不适用
(实际和正式论点列表的长度不同)
构造函数java.rmi.server.UnicastRemoteObject.UnicastRemoteObject(int,java.rmi.server.RMIClientSocketFactory,java.rmi.server.RMIServerSocketFactory)不适用
(实际和正式论点列表的长度不同)
我的问题是,当javase8 api中存在
java.rmi.server.UnicastRemoteObject
时,为什么编译器会给出错误? 最佳答案
子类化UnicastRemoteObject并调用UnicastRemoteObject()构造函数。
错误。这样做需要rmic
。
子类化UnicastRemoteObject
并调用UnicastRemoteObject(port)
构造函数。
正确。您忽略了以下几种情况:
子类化UnicastRemoteObject
并调用UnicastRemoteObject(int, RMIClientSocketFactory, RMIServerSocketFactory)
构造函数(反之亦然)。
不子类化UnicastRemoteObject
并调用UnicastRemoteObject.exportObject(Remote, int)
方法。
不子类化UnicastRemoteObject
并调用UnicastRemoteObject.exportObject(Remote, int, RMIClientSocketFactory, RMIServerSocketFactory)
方法(同样,它可能是相反的方式)。
编辑
MyServer()throws RemoteException {
new UnicastRemoteObject(5000);
}
这不是调用基类构造函数的方式。正确的形式是:
MyServer() throws RemoteException {
super(5000);
}
这是很基本的。