通用方法有问题

时间:2019-01-02 15:41:50

标签: java generics

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

1 个答案:

答案 0 :(得分:0)

您要在静态方法中说的是,列表应包含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));
}