我正在扩展类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)
行来创建一个未绑定的套接字,我相信我应该在绑定之前设置重用地址套接字选项。如何解决此错误?
答案 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;
}