当前位置:编程学习 > C/C++ >>

钻石运算符的一个 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语言 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,