2

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

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

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

4

2 回答 2

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>(); 
于 2013-04-02T21:34:44.473 回答
0

您可以将所需的任何方法添加TileEntity到您的界面中,然后制作ArrayList您的界面。可能有一些奇特的方法可以使用泛型以更好的方式解决问题,但我不确定如何。

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

于 2013-04-02T21:32:30.900 回答