【发布时间】:2016-07-04 09:37:24
【问题描述】:
我一直在尝试使用泛型参数获取泛型方法,但我似乎无法让它工作。这是声明:
/**
* Set items as table rows content
*
* @param rows - table row content
*/
public abstract void setItems(List<?> rows);
这是实现:
@Override
public void setItems(List<Dto> bonuses) {
//code here
}
Dto 是一个实际的类,但编译器说它看不到它的父类。
Table 类型的方法 setItems(List) 必须覆盖或 实现一个超类型方法
如果我在泛型声明中将它定义为单独的参数,那么编译器会说我的新类型隐藏了一个已经定义的类
我无法对编译器说我想要这个实现中的具体参数。
我尝试将其更改为类型而不是通配符,但产生相同的结果。如何让它与具体实现一起工作 (Dto) ?
【问题讨论】:
-
好吧,如果您的基类接口没有帮助……您是否有特定的原因不想更改它?你知道,就像在你的基类/接口上放一些类型参数“T”;然后说 T 是 Dto?
-
如果
Dto是某个基类,也可以将方法更改为:public abstract void setItems(List<? extends Dto> rows);并且被覆盖的方法看起来相同。 -
我不知道什么类型的 List(即 List
或 List )会实现,并且那些没有相同的父类/基类 -
他们不共享相似的 getter,如果可能的话,我想避免在将使用此方法的方法和实现中进行强制转换和类检查
-
像@Jägermeister 所说的那样做:
code public abstract class TestClass<T> { public abstract void setItems(List<T> rows); }