List可以存储接口类型的数据吗?

2021-02-04 16:25发布

问题:

今天看到了一块代码List存放的数据是一个接口类型的!我知道List可以存放Object类型的不知道可以存放Interface类型的!希望大佬给我这个小白上一课这样可以吗?
代码如下:

List<DataProcessor> DataProcessor 是一个接口

代码中没有对这个list操作就在方法中直接遍历操作了

接口的代码在下面

       //这里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);
}

回答1:

processors 这个可以被设置值的



回答2:

有什么问题吗?当然可以存放接口类型。任何类型都可以。



回答3:

可以,怎么存都可以



回答4:

“我知道List可以存放Object类型的不知道可以存放Interface类型的。”
万物皆是Object呀。



回答5:

额额,IList<T>,看这T有约束没有?然后自己就明白了,依赖倒置,协变。