swy*_*veu 6 java generics instance
假设我有一个包含不同类的项的arrayList,它们都具有相同的方法:draw(); 我有一个第三个类,它有一个方法drawItems(),它接受arrayList作为参数.现在,如果将这些对象作为通用对象传递,我如何调用这些对象的draw()方法?
以下不起作用.我明白为什么.Java不知道该项具有这样的功能.我怎么能绕过这个?
public void drawItems(ArrayList<T> data)
{
data.forEach((T item) -> {
item.draw();
});
}
Run Code Online (Sandbox Code Playgroud)
UPDATE
谢谢大家.我做了如下:
1)创建名为Drawable的接口:
public interface Drawable {
public void draw();
}
Run Code Online (Sandbox Code Playgroud)
2)将接口实现为Item类:
public class Item implements Drawable {
@Override
public void draw(GraphicsContext gc) {
//...
}
}
Run Code Online (Sandbox Code Playgroud)
3)调整drawItems:
public void drawItems(ArrayList<Drawable> data) {
data.forEach((Drawable item) -> {
item.draw();
});
}
Run Code Online (Sandbox Code Playgroud)
rge*_*man 10
您的T类型参数是无限制的,因此编译器不会对保证可用的方法做任何假设(Object方法除外).这就是它无法找到draw方法的原因.
具有该draw方法的类是继承自某些声明该draw方法的超类或接口吗?如果没有,请创建该接口,例如Drawable.
然后将参数更改data为类型List<? extends Drawable>,这样您就可以传入一个List<Drawable>或者例如一个List<DrawableSubclass>.
相反,你必须使用type参数T,声明T(我假设它在类上)T extends Drawable.
无论哪种方式,使用上限,List将在遗嘱中的所有内容Drawable,因此编译器知道该列表中的任何对象都将具有draw方法.
| 归档时间: |
|
| 查看次数: |
97 次 |
| 最近记录: |