Java泛型的定于与使用
Java泛型的定于与使用
泛型也叫泛类型。Java中可以声明泛型的地方。
泛型的分类:
- 泛型类:在类的定义时,声明泛型
- 泛型接口:在接口的定义时,声明泛型
- 泛型方法:在类的方法上声明泛型
一、泛型类
1、语法
定义泛型:
class Name <T1, T2, ... , Tn> {
//
}
/*
* T 代表一个 Java类,在类上声明的泛型。
*/
2、举例
定义泛型
/* 类上泛型的定义 */
public class Foo <T> {
// 用法1:泛化成员变量。
// 即:变量的类型由外部指定
private T info;
// 用法2:构造方法的类型
public Foo (T info) {
this.info = info;
}
// 用法3:方法的返回类型
public T getInfo(){
return info;
}
}
使用泛型
/*
* 类的使用:
* 使用时再传入具体的类型
*/
Foo foo = new Foo <String> ("hello");
二、泛型接口
泛型接口的声明与泛型类一致。
1、语法
public interface Name <T> {
T getInfo();
}
2、实现
泛型接口有2种实现:
- 实现类明确声明类型
- 实现类不明确声明类型
3、举例
前提条件,接口声明如下:
public interface Context <T> {
T getContext();
}
3.1 实现类1:(泛型类型明确)
// 实现类的泛型类型明确为:String
public class TomcatContext implements Context<String> {
@override
public String getContext() {
return "Tomcat"
}
}
3.2 实现类2:(泛型类型不明确)
// 从左向右数:第一个 T 表示:需要将泛型在类上声明,后面才能使用。
public class SpringContext <T> implements Context<T> {
@override
public T getContext() {
return null;
}
}
三、泛型方法
泛型方法是在调用方法时指明泛型的具体类型。
对比:
- 泛型类是在类实例化时指明泛型的具体类型。
1、分类
- 普通方法
- 静态方法
- 抽象方法
- final 修饰的方法
- 构造方法
2、语法
public <T> T foo (T obj){
}
/**
说明:
1、尖括号内为类型参数声明列表。位于返回值或void之前。
2、尖括号内声明的T,可以用在方法的任何地方或位置。
如:
- 参数、
- 方法体内部
- 返回值。
注意:
泛型方法和泛型类中的方法加以区分:
1、如果泛型类上已经声明了泛型,则在使用泛型类中的方法时,
不需要声明泛型,可以直接使用泛型(作为入参或返回值)。
2、如果类上没声明泛型,则泛型方法需要自己加一个 <T> ,
对泛型进行声明:这就是泛型方法。
*/