钻石运算符的一个 BUG

2014-11-23 23:55:11 · 作者: · 浏览: 12

先看出错的代码:

public class Holder {

private T value;

public Holder() {

}

public Holder(T value) {

this.value = value;

}

public void setValue(T value) {

this.value = value;

}

// 此处省略若干行。

}

Holder holder = new Holder<>("xxx");

看起来还好,但编译的时候却报错:

Uncompilable source code - incompatible types

required: javax.xml.ws.Holder

found: javax.xml.ws.Holder

老老实实把类型写出来就没问题:

Holder holder = new Holder("xxx");

如果非要用钻石运算符的话,可以采取下列两种方式之一:

// 使用默认构造器,再调用setValue 方法。

Holder holder = new Holder<>();

holder.setValue("xxx");

// 使用泛型通配符,但之后就不能调用setValue 了,否则编译出错。

Holder< extends Object> holder = new Holder<>("xxx");

摘自 神奇好望角