对构造函数的不明确调用" super(null)"在java.net.DatagramSocket中?

时间:2015-07-16 03:39:09

标签: java udp datagram

我正在扩展类Java.net.DatagramSocket并为子类提供自己的构造函数。我的新类UDP_Socket的构造函数如下

private UDP_Socket(int port) throws IOException {
    super(null); // Creates an unbound socket.
    super.setReuseAddress(true); // You set reuse before binding.
    super.bind(new InetSocketAddress(port)); // finally, bind
}

唯一的问题是在super(null)行,我得到了ambiguous reference to both constructor DatagramSocket(DatagramSocketImpl) and DatagramSocket(SocketAddress)。我需要super(null)行来创建一个未绑定的套接字,我相信我应该在绑定之前设置重用地址套接字选项。如何解决此错误?

2 个答案:

答案 0 :(得分:2)

问题是因为您致电super(null)DatagramSocket(DatagramSocketImpl)DatagramSocket(SocketAddress)的有效参数。

所以,编译器很困惑。您只能调用其中一个构造函数。

使用,

super((DatagramSocketImpl) null);

,或者

super((SocketAddress) null);

取决于您要调用的构造函数。

答案 1 :(得分:2)

错误:

ambiguous reference to both constructor DatagramSocket(DatagramSocketImpl) and DatagramSocket(SocketAddress)

告诉您null可以引用(DatagramSocketImpl) null(SocketAddress) null,从而使其模糊不清。

您必须显式调用两个构造函数之一

 // super((DatagramSocketImpl) null)
 super((SocketAddress) null)

或让你的构造函数需要

private UDP_Socket(int port, SocketAddress addr) throws IOException {
    super(addr);

修改

代码来自:Class DatagramSocket

 private DatagramSocket getDatagramSocket (int port) {
    DatagramSocket s = new DatagramSocket(null);
    s.setReuseAddress(true);
    s.bind(new InetSocketAddress(port));

    return s;
 }