我正在尝试创建类型为ArrayList
的TileEntity
(显然是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>();