程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 鑽石運算符的一個 BUG

鑽石運算符的一個 BUG

編輯:關於C語言

 

先看出錯的代碼:

 

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"); 

摘自 神奇好望角

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved