java泛型基类list_Java学习升阶 -01-一篇看懂java泛型(2)

本文深入探讨了Java中的泛型概念,指出泛型能够提高代码复用性和类型安全性。通过示例解释了如何使用泛型以及通配符?的含义。泛型允许在编译时检查类型,避免运行时类型转换错误。同时,文中对比了限定通配符与无限制通配符的使用场景,展示了如何在不同情况下灵活运用泛型来处理集合和继承结构。
摘要由CSDN通过智能技术生成

泛型的补充理解:泛型将参数作为变量可以更灵活高效的复用功能相同的业务代码,泛型可以用Object的引用来实现参数"任意化",“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是本身就是一个安全隐患。

那么泛型的好处就是在编译的时候能够检查类型安全,并且所有的强制转换都是自动和隐式的。

特别强调理解关于泛型通配符?,?代表一个占位符号,表明将来使用时候再指明类型。

这里看两个栗子:

1、定义打印一个集合元素

public static void print(List> list){

list.add("test"); //报错,这里对未来使用对类型是无法确定对

for (Object o: list

) {

System.out.println(o);

}

}

2、父类 Animal 和几个子类,如狗、猫等

static int countLegs (List extends Animal > animals ) {

int retVal = 0;

for ( Animal animal : animals )

{

retVal += animal.countLegs();

}

return retVal;

}

static int countLegs1 (List< Animal > animals ){

int retVal = 0;

for ( Animal animal : animals )

{

retVal += animal.countLegs();

}

return retVal;

}

public static void main(String[] args) {

List dogs = new ArrayList<>();

// 不会报错

countLegs( dogs );

// 报错

countLegs1(dogs);

}

所以,对于不确定或者不关心实际要操作的类型,可以使用无限制通配符(尖括号里一个问号,即 ),表示可以持有任何类型。像 countLegs 方法中,限定了上届,但是不关心具体类型是什么,所以对于传入的 Animal 的所有子类都可以支持,并且不会报错。而 countLegs1 就不行。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值