java泛型
Posted 我的技术平凡之路
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java泛型相关的知识,希望对你有一定的参考价值。
泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数
引入泛型的好处是安全简单。可以将运行时错误提前到编译时错误。没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患。
在泛型接口、泛型类和泛型方法的定义过程中,我们常见的如T、E、K、V等形式的参数常用于表示泛型形参
1、实例的类型是相同的
Box<String> name = new Box<String>("1");
Box<Integer> age = new Box<Integer>(2);
System.out.println("name class:" + name.getClass()); // com.qqyumidi.Box
System.out.println("age class:" + age.getClass()); // com.qqyumidi.Box
System.out.println(name.getClass() == age.getClass()); // true
泛型类型在逻辑上看以看成是多个不同的类型,实际上都是相同的基本类型
2、类型通配符
类型通配符一般是使用 ? 代替具体的类型实参。
注意了,此处是类型实参,而不是类型形参!且Box<?>在逻辑上是Box<Integer>、Box<Number>...等所有Box<具体类型实参>的父类,例如:
public static void getData(Box<?> data) {
System.out.println("data :" + data.getData());
}
参数类型可以是任何Box<具体类型实参>
3、类型通配符上下限
将上面的方法改造下
public static void getData(Box<? extends Number> data) {
System.out.println("data :" + data.getData());
}
这时,参数类型就只能是具体类型为Number或子类的了,例如:Box<Integer>,Box<Number>等
以上是关于java泛型的主要内容,如果未能解决你的问题,请参考以下文章