2013-03-29 56 views
1

對不起,但我不確定我是否使用或正在使用正確的術語,但基本上我想創建一個名爲EntityList的類,它擴展了ArrayList但我希望它使我創建的接口EntityInterface基本上用於E的所有時刻EntityList,所以我沒有手動聲明。Java:如何擴展一個使用泛型但限制類型的對象

代碼明智的我希望能夠把這個在

EntityList entityList = new EntityList(); 

,並獲得該

EntityList<EntityInterface> entityList = new EntityList<EntityInterface>(); 

我真的不知道該如何從這裏出發的等效的結果。這是我對這個問題的嘗試。

import java.util.ArrayList; 

//right now just a class that extends ArrayList designed to hold Entities. 
public class EntityList<EntityInterface> extends ArrayList<EntityInterface> { 

    EntityList(){ 

    } 
} 

我可以顯示問題的最好辦法是顯示彷彿ArrayList的是瞬間變化。

import java.util.ArrayList; 

//right now just a class that extends ArrayList designed to hold Entities. 
public class EntityList<EntityInterface> { 

    ArrayList al = new ArrayList(); 

    EntityList(){ 

    } 
} 

但是這基本上是我想要的東西,又在變量的形式,而不是延伸形式。

import java.util.ArrayList; 

//right now just a class that extends ArrayList designed to hold Entities. 
public class EntityList<EntityInterface> { 

    ArrayList<EntityInterface> al = new ArrayList<EntityInterface>(); 

    EntityList(){ 

    } 
} 

我相信,如果我這樣做,

public class EntityList<? implements EntityInterface> extends ArrayList<?> { 

它應該工作在此基礎上螺紋。與我的代碼此修改嘗試它日食後 Generic: ArrayList of ? Extends ISomeInterface in Java

但是:

public class EntityList<E implements EntityInterface> extends ArrayList<E> { 

和 公共類EntityList擴展的ArrayList { 兩人都在日食引發錯誤。 我正在使用Java 6.我不確定我使用的是哪個子版本。我確實有Java 7,如果這將糾正錯誤,我會嘗試它。

回答

3

public class EntityList extends ArrayList<EntityInterface> {

+0

不只是EntityInterface作爲名稱,如果泛型類型? 。 爲什麼這是如何不同於 。 「公共類EntityList擴展ArrayList {」 – JayCD

+0

「EntityList不再是一般類型的類,所以你會像使用它:'EntityList list = new EntityList();'。 –

+0

這看起來不錯。記住當你從一個EntityList中獲得(x)時,你將得到一個EntityInterface,而不是實際放入的對象的類。 – CapnSmack