今天看到了一块代码List存放的数据是一个接口类型的!我知道List可以存放Object类型的不知道可以存放Interface类型的!希望大佬给我这个小白上一课这样可以吗?
代码如下:
//这里List存放的数据类型是一个接口
private List<DataProcessor> processors ;
private Logger logger = Logger.getLogger(DataProcessHandler.class);
@Transactional
public ADIContext handle(ADIContext context){
try {
//这里直接操作这个List
for(DataProcessor processor : processors){
if(context.getStatus() == context.STATUS_SUCCESS){
processor.process(context);
}else{
break ;
}
}
} catch (Exception e) {
context.setStatus(ADIContext.STATUS_FAIL);
context.setMsg("数据存储处理失败..."+ExceptionHelper.getExceptionString(e));
logger.error("数据存储处理失败,taskId="+context.getTaskId(),e);
}
if(context.getStatus() == context.STATUS_FAIL){
throw new RuntimeException(context.getMsg());
}
return context;
}
public interface DataProcessor {
void process(ADIContext context);
}
processors 这个可以被设置值的
怎么设置值
如果要给processors设置值怎么设置list.add这种方式吗?
@忆尘不散: 简单来说可以提供一个set方法或者构造函数,或者builder模式构造这个对象,你可以全文搜索这个属性,找下具体设置值的地方
@忆尘不散: 成员变量你需要注意的是线程安全问题,list的add方法是向这个list添加具体值,processors是一个集合,他们是不同的。
@ethan_soul: 我找到了设置值得地方了,看懂了,谢谢大佬,666,真的不知道list可以存放接口类型的,今天是第一次遇到,万分感谢!
@忆尘不散: Java 万物皆对象,list只是一种集合,任意对象都可以存入集合中,包括它自己
@ethan_soul: 懂了!茅塞顿开!
有什么问题吗?当然可以存放接口类型。任何类型都可以。
那怎么向这个list中添加对象呢?
接口不能被new
可以,怎么存都可以
“我知道List可以存放Object类型的不知道可以存放Interface类型的。”
万物皆是Object呀。
额额,IList<T>,看这T有约束没有?然后自己就明白了,依赖倒置,协变。
看了有约束没有interface这个类型
这里你看到的数据类型是interface,
但由于Interface是不可以被new的,
所以实际实例对象应该是子类的实例,
这是java多态的一种体现。
类似于 List<Map> ,Map也是Interface,也可以存