2016-05-30 71 views
1

林實現延伸的通用適於訪問一個主數據存儲庫和應該能夠返回一個通用的主數據類型的子類型,實現類型代表更廣泛的主數據類型編譯錯誤返回通用的列表與從類型

public abstract class TypedMasterData implements Comparable<TypedMasterData> { 
..... 
} 

的具體類型擴展主型

public class CompanyName extends TypedMasterData { 
... 
} 

我有抽象訪問主數據回購,應該返回收窄類型的適配器。

public class DefaultMasterDataRespositoryAdapter implements MasterDataRespositoryAdapter { 

    //some code just to check for implementaion validity, 
    @Override 
    public <T extends TypedMasterData> List<T> getAllValuesOfType(T t) { 
     return Arrays.asList(new CompanyName[] {new CompanyName(1, "CompanyName", "ADLC", "ADLC", null)}); 
    } 

    .... 
} 

但該方法getAllValuesOfType下面給出一個編譯錯誤,

enter image description here

回答

0

你越來越混淆約泛型這裏。我想更好地執行MasterDataRespositoryAdapter.getAllValuesOfType是:

public <T extends TypedMasterData> List<TypedMasterData> getAllValuesOfType(T t) ; 

雖然我們不知道什麼參數T t在這裏這樣做可能是你可以擺脫它。

你能想到的<T extends TypedMasterData>作爲一個具體的類,它是至少TypedMasterData類型,但在這裏,你正在試圖將一些CompanyName到「具體類」的List。這就像試圖將Integer放入List<Double>IntegerDouble都繼承Number,但無論如何不會編譯。解決方法是將IntegerDouble放入List<Number>

泛型很難處理。儘管在Java方面有一年的經驗,但我自己仍然與他們一起努力。