没有为UnicastRemoteObject()找到合适的构造函数

时间:2016-07-09 20:30:17

标签: java constructor rmi

自javase api 8起,rmic已弃用。因此,通过将对象导出为:

,首选动态生成stubs
  1. UnicastRemoteObject进行子类化并调用UnicastRemoteObject()构造函数。
  2. UnicastRemoteObject进行子类化并调用UnicastRemoteObject(port)构造函数。
  3. 所以我首先调用了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时,为什么编译器会出错?

1 个答案:

答案 0 :(得分:1)

  
      
  1. 对UnicastRemoteObject进行子类化并调用UnicastRemoteObject()构造函数。
  2.   

错误。这样做需要rmic

  
      
  1. UnicastRemoteObject进行子类化并调用UnicastRemoteObject(port)构造函数。
  2.   

正确。你遗漏了几个案例:

  1. UnicastRemoteObject进行子类化并调用UnicastRemoteObject(int, RMIClientSocketFactory, RMIServerSocketFactory)构造函数(可能反之亦然)。

  2. 继承UnicastRemoteObject并调用UnicastRemoteObject.exportObject(Remote, int)方法。

  3. 不对UnicastRemoteObject进行子类化并调用UnicastRemoteObject.exportObject(Remote, int, RMIClientSocketFactory, RMIServerSocketFactory)方法(同样可能反之亦然)。

  4. 修改

    MyServer()throws RemoteException {
        new UnicastRemoteObject(5000);
    }
    

    这不是你如何调用基类构造函数。正确的形式是:

    MyServer() throws RemoteException {
        super(5000);
    }
    

    这是相当基本的。