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,可以用在方法的任何地方或位置。
如:
- 参数、
- 方法体内部
- 返回值。
*/