如何从通用对象调用实例方法?

How can I call an instance method from a generic object?

假设我有一个包含不同 classes 项目的 arrayList,它们都具有相同的方法:draw(); 我有第三个 class,其方法 drawItems() 将 arrayList 作为参数。现在,如果这些对象作为通用对象传递,我该如何调用它们的 draw() 方法?

下面这个不起作用。我明白为什么。 Java 不知道该项目有这样的功能。 我该如何解决这个问题?

public void drawItems(ArrayList<T> data) 
{
    data.forEach((T item) -> {
        item.draw();
   }); 
}

更新

谢谢大家。我是这样做的:

1) 创建名为 Drawable 的界面:

public interface Drawable {
    public void draw();
}

2) 在项目 class 中实现接口:

public class Item implements Drawable { 

    @Override
    public void draw(GraphicsContext gc) {
        //...
    }
}

3)调整drawItems:

public void drawItems(ArrayList<Drawable> data) {

    data.forEach((Drawable item) -> {
        item.draw();
    });
}

您的 T 类型参数是无界的,因此编译器不会对保证可用的方法做出任何假设(Object 方法除外)。这就是它找不到 draw 方法的原因。

具有 draw 方法的 class 是否继承自某些声明了 draw 方法的超类class 或接口?如果没有,请创建该接口,例如Drawable.

然后将参数 data 更改为 List<? extends Drawable> 类型,这样您就可以传入 List<Drawable> 或例如List<DrawableSubclass>.

如果您必须使用类型参数 T,请将 T(我假设它在 class 上)声明为 T extends Drawable.

无论哪种方式,有了上限,List 中的所有内容都将是 Drawable,因此编译器知道该列表中的任何对象都将具有 draw 方法。