java - 泛型方法的问题
问题描述
我对 Q 类的方法 idTag 有疑问。我不确定应该放什么类型而不是 XXXX。我试过 < T extends Taggable< T >> 但以下调用存在问题: Q.idTag (b) ;
它说 :
Q 类型中的方法 idTag(List) 不适用于参数 (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);
}
}
解决方案
您在静态方法中要说的是列表应该包含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));
}
推荐阅读
- matlab - 如何标记 500 值以下的内容?
- c++ - 为什么我只能使用 auto 类型创建函数别名?
- python - Python:循环后创建所有变量返回
- python - 无法在 Windows 上安装 Thinbgsboard IoT Gateway
- c++ - 如何用 QtCharts 绘制非连续的时间序列轴?
- matlab - 没有工具箱的Matlab中的模数
- python - 在不使用 max 或 count 函数的情况下查找最大值并计算它在列表中出现的次数
- javascript - React 中标题(H1、H2、H3、H4、H5、H6)组件的组合与继承
- python - 如何在(反向?)观察者模式中注册事件处理程序?
- vba - 如何在模块中使用表单控件