假设类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);