我正在尝试创建类型为ArrayListTileEntity(显然是java)(是的,这是我的世界mod)。但是我还需要添加到ArrayList的对象来实现特定的接口。

我想到的第一个选择是创建实现接口的TileEntity的抽象子类,并将其用作ArrayList类型。但是鉴于人们通常会创建自己的TileEntity子类并将其用作其通常子类的事实,并且我希望人们能够加入我的mod中,所以我不能指望他们会继承TileEntity以外的任何子类。 >。

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

最佳答案

您可以使使用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>();

07-26 01:55