首页 新闻 会员 周边

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

1
悬赏园豆:20 [已解决问题] 解决于 2021-02-04 16:54

今天看到了一块代码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);
}
忆尘不散的主页 忆尘不散 | 初学一级 | 园豆:163
提问于:2021-02-04 13:32
< >
分享
最佳答案
0

processors 这个可以被设置值的

收获园豆:20
ethan_soul | 菜鸟二级 |园豆:238 | 2021-02-04 16:39

怎么设置值

忆尘不散 | 园豆:163 (初学一级) | 2021-02-04 16:40

如果要给processors设置值怎么设置list.add这种方式吗?

忆尘不散 | 园豆:163 (初学一级) | 2021-02-04 16:43

@忆尘不散: 简单来说可以提供一个set方法或者构造函数,或者builder模式构造这个对象,你可以全文搜索这个属性,找下具体设置值的地方

ethan_soul | 园豆:238 (菜鸟二级) | 2021-02-04 16:43

@忆尘不散: 成员变量你需要注意的是线程安全问题,list的add方法是向这个list添加具体值,processors是一个集合,他们是不同的。

ethan_soul | 园豆:238 (菜鸟二级) | 2021-02-04 16:47

@ethan_soul: 我找到了设置值得地方了,看懂了,谢谢大佬,666,真的不知道list可以存放接口类型的,今天是第一次遇到,万分感谢!

忆尘不散 | 园豆:163 (初学一级) | 2021-02-04 16:51

@忆尘不散: Java 万物皆对象,list只是一种集合,任意对象都可以存入集合中,包括它自己

ethan_soul | 园豆:238 (菜鸟二级) | 2021-02-04 16:53

@ethan_soul: 懂了!茅塞顿开!

忆尘不散 | 园豆:163 (初学一级) | 2021-02-04 16:54
其他回答(5)
0

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

Timetombs | 园豆:3954 (老鸟四级) | 2021-02-04 14:11

那怎么向这个list中添加对象呢?
接口不能被new

支持(1) 反对(0) 忆尘不散 | 园豆:163 (初学一级) | 2021-02-04 14:25
0

可以,怎么存都可以

yytxdy | 园豆:1680 (小虾三级) | 2021-02-04 14:16
0

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

你学会了吗 | 园豆:202 (菜鸟二级) | 2021-02-04 14:18
0

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

Jonny-Xhl | 园豆:691 (小虾三级) | 2021-02-04 14:47

看了有约束没有interface这个类型

支持(0) 反对(0) 忆尘不散 | 园豆:163 (初学一级) | 2021-02-04 16:41
1

这里你看到的数据类型是interface,
但由于Interface是不可以被new的,
所以实际实例对象应该是子类的实例,
这是java多态的一种体现。
类似于 List<Map> ,Map也是Interface,也可以存

chunmianbujuexiao | 园豆:204 (菜鸟二级) | 2021-02-22 16:51
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册