钻石运算符的一个 BUG
先看出错的代码:
public class Holder<T> {
private T value;
public Holder() {
}
public Holder(T value) {
this.value = value;
}
public void setValue(T value) {
this.value = value;
}
// 此处省略若干行。
}
Holder<Object> holder = new Holder<>("xxx");
看起来还好,但编译的时候却报错:
Uncompilable source code - incompatible types
required: javax.xml.ws.Holder<java.lang.Object>
found: javax.xml.ws.Holder<java.lang.String>
老老实实把类型写出来就没问题:
Holder<Object> holder = new Holder<Object>("xxx");
如果非要用钻石运算符的话,可以采取下列两种方式之一:
// 使用默认构造器,再调用setValue 方法。
Holder<Object> holder = new Holder<>();
holder.setValue("xxx");
// 使用泛型通配符,但之后就不能调用setValue 了,否则编译出错。
Holder<? extends Object> holder = new Holder<>("xxx");
摘自 神奇好望角
补充:软件开发 , C语言 ,