其实我可以把Monitorable修改成这样:public abstract class Monitorable { private List<CheckerBase<? super Monitorable>> checkers; public void setCheckers(List<CheckerBase<? super Monitorable>> value){ this.checkers=value; } public List<CheckerBase<? super Monitorable>> getCheckers(){ return this.checkers; }
public List<String> CheckBy() { List<String> results = new ArrayList<String>(); for(CheckerBase<? super Monitorable> checker : checkers){ results.addAll(checker.Check( this )); } return results; } } 但是,给他的checkers赋值的时候,就会出现错误: public static void main(String[] args) { List<CheckerBase<? super Monitorable>> checkers = new ArrayList<? super Monitorable>(); checkers.add(new AChecker()); myReceipt.setCheckers(checkers); } 这段代码中 checkers.add(new AChecker()); 就会提示参数类型错误。
别用记事本了,错误一堆 results.addAll(checker.Check( this ));// addAll接收的是Collection,Check()返回的是String List<CheckerBase<? super Monitorable>> checkers = new ArrayList<? super Monitorable>();// 前后<>不匹配
别用记事本了,错误一堆 results.addAll(checker.Check( this ));// addAll接收的是Collection,Check()返回的是String List<CheckerBase<? super Monitorable>> checkers = new ArrayList<? super Monitorable>();// 前后<>不匹配
CheckerBase接口的Check方法返回的是List,实现里返回的是String
String 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{
......
}
public interface CheckerBase<T> {
String 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 List<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{
......
}
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);
}
private List<CheckerBase<? super Monitorable>> checkers; public void setCheckers(List<CheckerBase<? super Monitorable>> value){
this.checkers=value;
}
public List<CheckerBase<? super Monitorable>> getCheckers(){
return this.checkers;
}
public List<String> CheckBy() {
List<String> results = new ArrayList<String>();
for(CheckerBase<? super Monitorable> checker : checkers){
results.addAll(checker.Check( this ));
}
return results;
}
}
但是,给他的checkers赋值的时候,就会出现错误: public static void main(String[] args) {
List<CheckerBase<? super Monitorable>> checkers = new ArrayList<? super Monitorable>();
checkers.add(new AChecker());
myReceipt.setCheckers(checkers);
}
这段代码中 checkers.add(new AChecker());
就会提示参数类型错误。
别用记事本了,错误一堆
results.addAll(checker.Check( this ));// addAll接收的是Collection,Check()返回的是String
List<CheckerBase<? super Monitorable>> checkers = new ArrayList<? super Monitorable>();// 前后<>不匹配
别用记事本了,错误一堆
results.addAll(checker.Check( this ));// addAll接收的是Collection,Check()返回的是String
List<CheckerBase<? super Monitorable>> checkers = new ArrayList<? super Monitorable>();// 前后<>不匹配
唉,真愁人,咋这么多错误呢。