我对Q类的idTag方法有疑问。我不确定应该使用哪种类型而不是XXXX。
我尝试了>,但是以下调用存在问题:Q.idTag(b);
它说 :
Q类型的方法idTag(List)不适用于
参数(ArrayList )
>似乎不是正确的答案,但我已经不知道了,我不知道什么是正确的答案
谢谢
interface Taggable<T> {
void tag(T t);
T getTag();
}
class Elem implements Taggable<Elem> {}
class Obj implements Taggable<Obj> {}
class RedElem extends Elem {}
class Q {
static <XXXX> void idTag(List<T> l) {
for (T e : l) e.tag(e);
}
public static void main(String args[]) {
ArrayList<Elem> a = new ArrayList<Elem>();
ArrayList<RedElem> b = new ArrayList<RedElem>();
ArrayList<Obj> c = new ArrayList<Obj>();
idTag(a);
idTag(b);
idTag(c);
}
}
最佳答案
您要在静态方法中说的是,列表应包含Taggable
项,而不是您要声明的内容。你需要
static <T, E extends Taggable<T>> void idTag(List<E> tList, T tagWith) {
tList.forEach(e.tag(tagWith));
}
或者,如果您真的想为每个项目加上自己的标签(没有什么意义):
static <E extends Taggable<E>> void idTag(List<E> tList) {
tList.forEach(e-> e.tag(e));
}