关于Java中的泛型的疑问:
关于Java中的泛型的疑问:
我的类结构如下:
public interface CheckerBase<T> {
List<CheckResult<T>> Check(T target);
}
public class AChecker implements CheckerBase<APOJO> {
@Override
public String Check(APOJO target) {
// TODO check logic;
}
}
public class BChecker implements CheckerBase<BPOJO> {
@Override
public String Check(BPOJO target) {
// TODO check logic;
}
}
public abstract class Monitorable {
private List<CheckerBase<?>> checkers;
public void setCheckers(List<CheckerBase<?>> value){
this.checkers=value;
}
public List<CheckerBase<?>> getCheckers(){
return this.checkers;
}
public String CheckBy() {
List<String> results = new ArrayList<String>();
for(CheckerBase<?> checker : checkers){
results.addAll(checker.Check( this ));
}
return results;
}
}
public class APOJO implements Monitorable{
......
}
public class BPOJO implements Monitorable{
......
}
------------------------
现在的问题出现在Monitorable类的private List<CheckerBase<?>> checkers;这个句话上。
如果用List<CheckerBase<?>>类型,则checker.Check( this )提示参数不匹配,
如果不用List<CheckerBase<?>>这个类型,用什么类型才能保证所有的CheckerBase子类的
对象都能加入到这个List中呢?(不考虑用Object类型)
------解决方案--------------------这代码居然能通过编译?!你是怎么做到的?
CheckerBase接口的Check方法返回的是List,实现里返回的是String
------解决方案--------------------Monitorable.checkBy方法里面,返回值为string,但是程序里返回的是list啊。
LZ再检查一下吧。
------解决方案--------------------
public?interface?CheckerBase<T>?{
????String?Check(T?target);
}
调整为如下:
public?interface?CheckerBase<T extends Monitorable>?{
????String?Check(T?target);
}
------解决方案--------------------擦,不识别。。再试试。
public interface CheckerBase<<span style="color: #FF0000;">T extends Monitorable</span>> {
String Check(T target);
}
------解决方案--------------------