我对 Q 类的 idTag 方法有疑问。我不确定应该输入什么类型而不是 XXXX。 我已经尝试过 < T extends Taggable< T >> 但以下调用存在问题: Q.idTag (b) ;
它说:
The method idTag(List) in the type Q is not applicable for the arguments (ArrayList< RedElem>)
< T extends Taggable< T >> 似乎不是正确的答案,但我已经没有主意了,我不知道什么是正确的答案 谢谢
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);
}
}
最佳答案
您试图在静态方法中说的是列表应该包含可标记的项目,这不是您要声明的内容。你需要
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));
}
关于java - 泛型方法的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54009154/