java - 泛型方法的问题

标签 java generics

我对 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/

相关文章:

c# - 测试泛型类型是否为字符串的最佳方法? (C#)

generics - 是否可以在 typescript 中导入通用 promise ?

c# - 是否可以在同一个 T 上使用通用的 "in"和 "out"修饰符?

java - maven型材还是 Spring 型材?

Java-有关泛型的错误

java - Windows 上的 Hadoop 在启动数据节点时出现 Eclipse 错误

java - 实例化泛型类并实现泛型接口(interface)

java - PaintComponent 没有在正确的时间被调用

java - 如何避免使用来自不同包的生成类的重复代码

arrays - 如何一般处理数组和字典的枚举(集合)的不同返回类型?