我对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));
}

09-05 07:31