java - 如何从通用对象调用实例方法?
问题描述
假设我有一个 arrayList 包含不同类的项目,它们都具有相同的方法:draw(); 我有一个带有方法 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)在Item类中实现接口:
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
方法的类是否继承自某个声明该draw
方法的超类或接口?如果没有,请创建该接口,例如Drawable
.
然后将参数更改data
为 type List<? extends Drawable>
,这样您就可以传入 aList<Drawable>
或例如 a List<DrawableSubclass>
。
相反,如果您必须使用类型参数T
,请声明T
(我假设它在类上)为T extends Drawable
.
无论哪种方式,使用上限,List
will 中的所有内容都是Drawable
,因此编译器知道该列表中的任何对象都将具有draw
方法。
推荐阅读
- postgresql - 将数据从 postgres 表发送到 AWS S3 Bucket
- java - Java中的补丁方法
- angular - ng-select 的默认值
- python - Pycharm Python 控制台回归输出未对齐
- javascript - 使用 Javascript 按钮增加数字
- c++ - 将 ASCII 艺术转换为 OpenCV Mat
- python - TypeError:字符串索引必须是整数 - PyTorch
- css - 使用 slickR 调整雪佛龙和幻灯片之间的空间
- kubernetes - 普罗米修斯查询语言中 somestring1_somestring2:metric_name:some_operation 是什么意思
- powerapps - 将图像属性从电源应用程序传递到电源自动化流程