[guava]ImmutableList使用问题分析
2016-10-25 22:43
405 查看
今天用到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。
使用场景:
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。
相关文章推荐
- 使用clone解决hibernate+spring集成中的延迟加载问题及分析(no session or session was closed)
- SQL 查询分析中使用net命令问题
- 读者写者问题--使用信号量的读者优先与写者优先程序分析
- Android系统Recovery工作原理之使用update.zip升级过程分析(二)---update.zip差分包问题的解决
- MooseFS使用问题分析总结
- JfreeChart使用经验总结(分析了使用中碰到的一些常见问题)
- 使用jstack分析cpu消耗过高的问题
- Spring使用自动代理缺少asm包的问题分析
- 如何使用MDB调试分析Solaris内核死锁的问题
- 使用 IBM 性能分析工具解决生产环境中的性能问题
- SQL 查询分析中使用net命令问题
- List中使用remove出错的问题分析
- MATLAB中使用FFT做频谱分析时频率分辨率问题(转载)
- oracle 使用闪回事务查询是 视图flashback_transaction_query中列operation为unknown 问题分析
- java 使用ireport无法显示图片问题分析
- 485总线在电能表使用中的常见问题及分析(转)
- 关联查询中使用TOP引起的性能问题分析
- Android系统Recovery工作原理之使用update.zip升级过程分析(二)---update.zip差分包问题的解决
- ipod无法使用无线网络问题分析