67,538
社区成员
发帖
与我相关
我的任务
分享
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;
//setter,getter
public List<String> CheckBy() {
List<String> results = new ArrayList<String>();
for(CheckerBase<?> checker : checkers){
results.add(checker.Check( this ));
}
return results;
}
}
public class APOJO implements Monitorable{
......
}
public class BPOJO implements Monitorable{
......
}
public abstract class Monitorable {
private List<CheckerBase<? super Monitorable>> checkers;
// setter,getter
public List<String> CheckBy() {
List<String> results = new ArrayList<String>();
for(CheckerBase<? super Monitorable> checker : checkers){
results.add(checker.Check( this ));
}
return results;
}
}
public static void main(String[] args) {
APOJO = new APOJO()
List<CheckerBase<? super Monitorable>> checkers = new ArrayList<CheckerBase<? super Monitorable>> ();
checkers.add(new AChecker());
APOJO.setCheckers(checkers);
}
checkers.add(new AChecker());
public interface CheckerBase {
String Check(Monitorable target) throws Exception ;
}
public class AChecker implements CheckerBase {
@Override
public String Check(Monitorable target) throws Exception {
if( !(target instanceof APOJO )){
throw new Exception("");
}
...
}
}
也就是说,我去掉了CheckerBase的泛型参数。
把方法的参数修改为了Monitorable。
在具体的 CheckerBase子类中判断是否是该子类能CHeck的对象。不是抛出异常。
实际上这也是我第一版的设计,但是这里的问题就是需要一个类型判断。
本来我想通过泛型做到强类型化的优点。但是实现不了。