JavaSE_8系列博客——Java语言的特性(六)--泛型(1)--宏观把控

为什么要引入泛型?

  1. 编译时更强大的类型检查。

    如果代码违反类型安全性,则Java编译器将强类型检查应用于通用代码并发出错误。修复编译时错误比修复可能难以找到的运行时错误更容易。

  2. 消除类型转换,以及带来的拆装箱的操作。提高了程序的性能,编程更加容易。

  3. 使程序员能够实现通用算法

    通过使用泛型,程序员可以实现对不同类型的集合进行工作的通用算法,可以自定义,并且类型安全且易于阅读。

什么是泛型

通俗来讲,泛型(通用类型)是一种将类型进行参数化的技术。参数化的意思,就是说让类型可根据传入的参数的值来发生动态变化。

易混概念

以下的名词说的都是一回事儿:
泛型=通用类型=类型参数化=参数化的类型=类型形参
注意区别:
1. 类型形参 不等于 形参
2. 类型通配符 不等于 泛型

有界限的泛型

设定类型形参的上限

其实,这个概念很简单。目的在于限制传入到类型形参中的实际类型,要么是上限类型,要么是该上限类型的子类。好处是:在泛型中能够充分利用面向对象中的多态的技术。使得在泛型中也能够使用协变的思想。

类型推断和菱形语法

什么是类型推断?其实,是为了简化咱们的编程复杂度,减轻程序员的编程工作。
它是Java编译器查看每个方法调用和相应声明的能力,以确定使调用适用的类型参数(或参数)。让推理算法确定参数的类型,如果可用,确定结果分配或返回的类型。最后,推理算法尝试找到适用于所有参数的最具体的类型。
例如:

class List<E> {
   static <Z> List<Z> nil() { ... };
   static <Z> List<Z> cons(Z head, List<Z> tail) { ... };
   E head() { ... }
}
//通过方法赋值的目标参数来自动推断泛型的类型
List<String> l = List.nil();
//而不是显示的指定类型
//List<String> l = List.<String>nil();
//通过前面方法参数类型推断泛型的类型
List.cons(42, List.nil());
//而不是显示的指定类型
//List.cons(42, List.<Integer>nil());

什么是菱形语法:
是JavaSE7之后,推出的新特性。其本质,也是和类型推断是一样的。它也是为了简化咱们的编程复杂度,减轻程序员的编程工作。
例如:
使用菱形语法前:

Map<String, String> myMap = new HashMap<String, String>();

使用菱形语法后:

Map<String, String> myMap = new HashMap<>(); //注意后面的"<>"

泛型的实现原理

参考系列博客(四)
http://blog.csdn.net/t131452n/article/details/78068944

泛型和类型通配符

参考系列博客(三)

http://blog.csdn.net/t131452n/article/details/78068921

何时何地使用泛型?

参考系列博客(二):http://blog.csdn.net/t131452n/article/details/78068906

如何使用泛型?

参考系列博客(五)
http://blog.csdn.net/t131452n/article/details/78069029

参考博客:

泛型工作原理和重要性
理解Java中的泛型
泛型的内部原理和类型擦除带来的问题
Java官方对泛型的培训手册

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值