Java学习——Java泛型
文章目录
- Java学习——Java泛型
- 一、泛型
- (1). 泛型的使用
- 泛型类
- 泛型接口
- 泛型方法
- (2). 泛型限制类型
- 泛型中的通配符 ?
- 总结
一、泛型
概念:
泛型,即“参数化类型”。
参数化类型,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。
泛型的本质是为了参数化类型(在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型)。也就是说在泛型使用过程中,操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。
作用:使用泛型可以最大限度地重用代码、保护类型的安全以及提高 性能。泛型特性对Java影响最大是集合框架的使用。
(1). 泛型的使用
泛型类
举例,一个简单的泛型类,很好的解释了何为参数化类型
public class ClassName<T>{
private T data;
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
泛型接口
举例:
public interface IntercaceName<T> {
T getName();
}
实现接口时,可以选择指定泛型类型,也可以选择不指定, 如下:
public class Interface1 implements IntercaceName<String> {
private String text;
@Override
public String getData() {
return text;
}
}
或是不指定类型:
public class Interface1<T> implements IntercaceName<T> {
private T data;
@Override
public T getData() {
return data;
}
}
泛型方法
private static <T> T 方法名(T a, T b) {}
说明:
(1)public 与 返回值中间<T>非常重要,可以理解为声明此方法为泛型方法。
(2)只有声明了<T>的方法才是泛型方法,泛型类中的使用了泛型的成员方法并不是泛型方法。
(3)<T>表明该方法将使用泛型类型T,此时才可以在方法中使用泛型类型T。
(4)与泛型类的定义一样,此处T可以随便写为任意标识,常见的如T、E、K、V等形式的参数常用于表示泛型。
(2). 泛型限制类型
在使用泛型时,可以指定泛型的限定区域。
例如: 必须是某某类的子类或某某接口的实现类。
格式:
<T extends 类或接口1 & 接口2>
泛型中的通配符 ?
类型通配符是使用 ? 代替方法具体的类型实参。
- <? extends Parent> 指定了泛型类型的上界
- <? super Child> 指定了泛型类型的下界
- <?> 指定了没有限制的泛型类型
注意:
在编译之后程序会采取去泛型化的措施。
也就是说Java中的泛型,只在编译阶段有效。
在编译过程中,正确检验泛型结果后,会将泛型的相关信息擦出,并且在对象进入和离开方法的边界处添加类型检查和类型转换的方法。
也就是说,泛型信息不会进入到运行时阶段。
总结
泛型,开始接触类核心库,( ̄︶ ̄)↗ !!!