2014-02-08 47 views
0

雖然我通過派生數據類型,但在執行的最後一行中確實存在問題。無法弄清楚。謝謝。通用類和傳遞派生數據類型

 public class ExtendedDHvalue extends DHvalue {} 



    public class DerivedHolderUnique<T> { 

    private Class<? extends T> a; 

    public DerivedHolderUnique(Class<? extends T> a){ 
     this.a = a; 
    } 

    public Class<? extends T> getA() { 
     return a; 
    } 
    public void setA(Class<? extends T> a) { 
     this.a = a; 
    } 

    public static void main(String[] args){ 

     ExtendedDHvalue eDV = new ExtendedDHvalue(); 
     DerivedHolderUnique<DHvalue> dhu = new DerivedHolderUnique<DHvalue>(eDV); 
    } 
} 

回答

1

你的構造函數採用Class<? extends T>類型的參數,你傳遞擴展T給它的參數。你應該這兩行更改爲:

Class<ExtendedDHvalue> eDV = ExtendedDHvalue.class; 
DerivedHolderUnique<DHvalue> dhu = new DerivedHolderUnique<DHvalue>(eDV); 
0

DerivedHolderUnique構造函數需要一個Class實例,而不是
ExtendedDHvalue實例。這是導致編譯時錯誤的原因。

你應該想到,如果你真的想

private Class<? extends T> a;

private T a;

,然後相應地返工你DerivedHolderUnique類。
我傾向於認爲你想要後者,但你應該更清楚。