我有一组实现接口(interface)的类 Paintable
和 Tickable
.
另一类,World
,通过将它们插入 ArrayList<Tickable>
来跟踪其中一些类.
我有一个不同的类适用于所有 Paintable
的对象,并且获取所有这些对象的可靠方法是使用 getPaintables() 方法向世界询问这个,因为所有对象都由 World
持有既可打勾又可绘画。
问题出在我尝试转换 Tickable
的时候对象为 Paintable
像这样的:
for (Paintable p : (ArrayList<Paintable>)world.getPaintables()) {
// Do stuff
}
这导致:
error: incompatible types: ArrayList<Tickable> cannot be converted to ArrayList<Paintable>.
是否可以通过其他方式来解决这个问题?我当然可以复制 ArrayList
在 World
, 一个为 Paintable
, 另一个为 Tickable
,但这对我来说似乎很麻烦。
我希望这是有道理的。
最佳答案
我认为“解决”这个问题的最简单方法就是创建一个通用界面并将其用于所有列表。如果您所有的类都像您所说的那样同时实现了 Tickable
和 Paintable
,那么您可能无论如何都应该这样做。
public class TickAndPaint
{
public static void main(String[] args) {
ArrayList<TickableAndPaintable> list = new ArrayList<>();
for( Paintable t : list ) {
}
for( Tickable t : list ) {
}
}
}
interface Paintable {}
interface Tickable {}
interface TickableAndPaintable extends Paintable, Tickable {}
关于Java,如何根据其接口(interface)之一重新转换对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35530527/