假设类A实现接口B,是否可以将List<A>参数传递给函数List<B>:
List<A> var1;
如何调用(有一些修复):func(var1)
void func(List<B> var){
}
任何建议将不胜感激。谢谢!
假设类A实现接口B,是否可以将List<A>参数传递给函数List<B>:
List<A> var1;
如何调用(有一些修复):func(var1)
void func(List<B> var){
}
任何建议将不胜感激。谢谢!
不,这是不可能的(至少,在没有一些怪诞的铸造的情况下是不可能的)。一个不是另一个的超类型。
当然: func(Collections.<B>unmodifiableList(var1))。只要您可以保证列表没有被修改,这种调用是安全的。
No. List<A>不是 的子类型List<B>。
原因是如果你有一个List<B>,你可以向它添加对象,其类是 的任何实现B。你不能对List<A>. 所以有些操作适用于 aList<B>但不适用于 a List<A>; 这意味着 aList<A>不可能是一种List<B>。
我认为,您真正想要的是List<? extends B>用作参数的类型,而不是List<B>.
多么奇怪的想法,试图绕过类型检查。
A类和B类具有相同的属性吗?如果是,请考虑通过 org.apache.commons.beanutils 复制它们。BeanUtils.copyProperties (src,dest) 并将 List 参数包装在某种转换方法中。
如果你坚持传递一些通常不兼容的东西,由于类型擦除,这样的东西应该可以工作:
List x = var1;
func(x);