Java,如何根据其接口(interface)之一重新转换对象?

标签 java interface casting

我有一组实现接口(interface)的类 PaintableTickable . 另一类,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>.

是否可以通过其他方式来解决这个问题?我当然可以复制 ArrayListWorld , 一个为 Paintable , 另一个为 Tickable ,但这对我来说似乎很麻烦。

我希望这是有道理的。

最佳答案

我认为“解决”这个问题的最简单方法就是创建一个通用界面并将其用于所有列表。如果您所有的类都像您所说的那样同时实现了 TickablePaintable,那么您可能无论如何都应该这样做。

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/

相关文章:

Java:接口(interface)

java - 合并多个表中的一些记录后如何找出表名?

java - 如何在单击按钮等事件后自动重绘?

java - 为什么Java中的final常量可以被重写?

c# - 从接口(interface)派生的通用对象的 XML 序列化列表,,,

ruby-on-rails - 如何使用 Rails 在 PostgreSQL 中将时间列更改为整数列?

c++ - 类型转换(来自派生类)

java - 贾斯珀报告,其中包含世界地图和不同颜色的圆圈,覆盖在不同国家的顶部

java - 文件上传 + 通过 HTTP POST 参数触发 Hudson 构建

eclipse - 跳转到 Eclipse IDE 中的接口(interface)实现