[guava]ImmutableList使用问题分析
来源:互联网 发布:什么比价软件好 编辑:程序博客网 时间:2024/05/18 02:07
今天用到ImmutableList的时候,在使用ImmutableList的过程中发现针对于
使用场景:
public ImmutableList<BmAbstractGroupService> validatePredicates = ImmutableList.of(
new BmZJGroupService()
);
其中
BmZJGroupService 是 BmAbstractGroupService的子类
此时会报错,报错提示将BmAbstractGroupService转换为BmZJGroupService
但是同样的使用场景
public ImmutableList<ValidatePredicate> validatePredicates = ImmutableList.of(
new CommonValidatePredicate(),
new ZJFullTimeRiderValidatePredicate(),
new ZJPartTimeRiderValidatePredicate(),
new CityProxyPartTimeRiderValidatePredicate(),
new ZJFullTimeZDValidatePredicate(),
new ZJPartTimeZDValidatePredicate()
);
new CommonValidatePredicate(),new ZJFullTimeRiderValidatePredicate(),new ZJPartTimeRiderValidatePredicate(),
new CityProxyPartTimeRiderValidatePredicate(),
new ZJFullTimeZDValidatePredicate(),new ZJPartTimeZDValidatePredicate()
都继承自ValidatePredicate,但是该场景下没有问题
并不会报错,追踪源码如下:
1.第一种情况
public static <E> ImmutableList<E> of(E element) {
return new SingletonImmutableList<E>(element);
}
2.第二种情况
/**
* Returns an immutable list containing the given elements, in order.
*
* @throws NullPointerException if any element is null
*/
public static <E> ImmutableList<E> of(E e1, E e2, E e3, E e4, E e5, E e6) {
return construct(e1, e2, e3, e4, e5, e6);
}
分析原因是因为针对第一种情况是因为在返回ImmutableList<E>时将BmZJGroupService转为了 E,ImmutableList<BmZJGroupService>返回给了
ImmutableList<BmAbstractGroupService> validatePredicates
但是此时发ImmutableList<BmAbstractGroupService> !=ImmutableList<BmZJGroupService>,因此会报错
但是对于第二种情况这五个实例具有共同的父类ValidatePredicate,在进行构造时,选取这几个实例的共同的父类作为返回值。
考虑第三种情况,一个BmAbstractGroupService类,一个String类,提示中,显示将Object的类型作为返回值。间接证明了上述是正确的,因为java中所有类的统一父类事Object。
0 0
- [guava]ImmutableList使用问题分析
- guava之ImmutableList三种初始化方式的使用实例
- Guava Multiset接口使用与分析
- Guava Lists.transform 使用及问题
- guava使用
- google的Guava库的callback使用分析
- 【Guava】使用Guava的RateLimiter做限流
- Guava Preconditions类使用【Guava学习笔记】
- Guava的简单使用
- google guava简单使用
- guava-IO使用
- GUAVA的基本使用
- guava部分使用API
- Guava 缓存 使用
- guava cache使用例子
- Guava使用笔记multiMap
- guava ListenableFuture使用
- Guava Collections使用介绍
- android知识回顾---4大组件之service
- 汇编语言与高级语言
- oracle SCN异常增长以及 ORA-19706
- Win10下Golang开发环境的搭建
- 立即执行函数
- [guava]ImmutableList使用问题分析
- apache虚拟主机的配置
- web项目中的路径问题
- effectiveC++之自己实现copy函数的注意事项
- 51nod1769(dirichlet convolution)
- POJ 1837 C - Balance(01背包)(dp)
- 解决canvas getimagedata 跨域问题[已解决]
- struts2详细配置及应用
- 绝对众数