collection的方法 java,java – 从指定它返回Collection的方法返回Collection

错误原因

引发异常的原因是因为Collection< ParentClass>可以有任何扩展ParentClass添加到它的对象.例如,可以向其添加以下类的实例

public class OtherChildClass extends ParentClass{

}

但是因为“真实”集合是Collection< ChildClass>这会引起错误.或者即使您向其添加了ParentClass,也会引发错误.总而言之不好.

然而,这可以通过使用Collection&lt ;?来解决.扩展ParentClass>在你的类型声明中.这意味着您将返回一个声明为包含某些类的Collection,该类可以转换为ParentClass并称为逆变.这样的集合不能添加新对象(允许的null异常),因为编译器永远不能保证您尝试放入它的内容是有效的.但它可以保证从它出来的任何东西都可以转换为ParentClass并且可以这样使用.见here for more details.用法示例如下:

import java.util.ArrayList;

import java.util.Collection;

public class TestClass {

public static int PARENTTYPE=0;

public static int CHILDTYPE=1;

ArrayList parentHolder=new ArrayList();

ArrayList childHolder=new ArrayList();

public TestClass(){

parentHolder.add(new ParentClass());

childHolder.add(new ChildClass());

}

public ArrayList extends ParentClass> getHolder(int type){

if (type==PARENTTYPE){

return parentHolder;

}else if (type==CHILDTYPE){

return childHolder; //

}else{

throw new RuntimeException("Not a valid type");

}

}

public static void main(String args[]){

TestClass test=new TestClass();

ArrayList extends ParentClass> col1=test.getHolder(PARENTTYPE);

ArrayList extends ParentClass> col2=test.getHolder(CHILDTYPE);

ParentClass childCastToParent=col2.get(0);

}

}

注: arraylists已被用于简洁,但同样适用于所有集合

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值