创建类和接口的arraylist

Wil*_*her 2 java generics arraylist

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

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

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

dce*_*chi 6

您可以对使用它的方法或类进行泛型化ArrayList.例如,一般方法:

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

一个通用类:

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>(); 
Run Code Online (Sandbox Code Playgroud)