创建类和接口的arraylist

时间:2013-04-02 21:19:59

标签: java generics arraylist

我正在尝试使用类型ArrayList创建一个TileEntity(显然是java)(是的,这是一个Minecraft mod)。但我还需要添加到ArrayList的对象来实现某个接口。

我想到的第一个选项是创建一个实现接口的TileEntity的抽象子类,并将其用作ArrayList类型。但是考虑到人们通常创建自己的TileEntity子类并将它们用作通常子类的类,并且我希望人们能够挂钩到我的mod,我不能指望它们除了子类之外TileEntity

我目前的解决方案是在添加之前检查if(object instanceof MyInterface),但这看起来很难看。当然,有一种方法可以设置ArrayList的类型,以要求对象既是TileEntity的子类又是MyInterface的实现者。

2 个答案:

答案 0 :(得分:6)

您可以对使用ArrayList的方法或类进行泛型化。例如,通用方法:

public <T extends TileEntity & MyInterface> void doStuffWith(T obj) {
    List<T> yourList = new ArrayList<T>();
    yourList.add(obj);
    ...//more processing
}

一个通用类:

public class ArrayListProcessor<T extends TileEntity & MyInterface> {
   List<T> theList;

   public void processList(T obj) {
      theList.add(obj);
      ...
   }

   public void someOtherMethod() {
      T listElem = theList.get(0);
      listElem.callMethodFromTileEntity();//no need to cast
      listElen.callMethodFromMyInterface();//no need to cast
   }
}

...//somewherein your code
//SomeObj extends TileEntity and implements MyInterface 
ArrayListProcessor<SomeObj> proc = new ArrayListProcessor<SomeObj>(); 

答案 1 :(得分:0)

您可以在界面中添加所需的TileEntity方法,然后只需创建界面的ArrayList即可。可能有一种使用泛型以更好的方式解决问题的奇特方式,但我不确定如何。

编辑: dcernahoschi的解决方案要好得多。