Wil*_*her 2 java generics arraylist
我正在尝试创建一个ArrayList
(所以java,显然)类型TileEntity
(是的,这是一个Minecraft 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
}
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)
归档时间: |
|
查看次数: |
2326 次 |
最近记录: |