泛型类
/**
* <T> 为该类定义泛型,可以是一个或多个<T,...>
* 定义的泛型可以在类中作为:
* 类变量类型: T data
* 类方法的入参以及返回类型 public void setData(T data),public T getData();次数以set,get方法举例,类的其他方法也是可以的
* @param <T>
* E:表示 Element,即元素,运用在集合中
* K:表示 Key,即键
* V:表示 Value,即值
* N:表示 Number,即数值类型
* T:表示 Type,即 Java 类型
* ? :表示不确定的 Java 类型
*/
public class Generic <T>{
private String code;
private String message;
private T data;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
/**
* 可以理解成泛型类的方法,但不能称之为泛型方法
* 因为这里类定义了泛型<T> 所以该类中的方法可以使用泛型T
* @return
*/
public T getData() {
return data;
}
/**
* 可以理解成泛型类的方法,但不能称之为泛型方法
* @return
*/
public void setData(T data) {
this.data = data;
}
/**
* 此方法可以定义泛型类中,也可以定义在普通类中,即泛型方法不一定定义在泛型类中
* <U,R> 即为为该方法定义了两个泛型U,R 定义的泛型可以作为方法的入参类型和返回类型,以及方法中的变量类型
* 入参和返回类型可以是泛型或者具体的数据类型;例如testGeneric1,testGeneric2
* @param u
* @param r
* @param <U>
* @param <R>
*/
public <U,R> void testGeneric(U u,R r){
// do something
}
/**
* 返回类型为具体类型
* @param u
* @param r
* @param <U>
* @param <R>
*/
public <U,R extends Number> String testGeneric1(U u,R r){
// do something
return r.toString();
}
/**
* 返回类型为泛型
* @param u
* @param r
* @param <U>
* @param <R>
*/
public <U,R extends Number> R testGeneric2(U u,R r){
// do something
return r;
}
}
泛型接口
import java.util.List;
/**
* <I,R> 定义泛型I,R
* 在该接口中可以使用泛型I,R作为接口方法的入参类型和返回值类型
* @param <I>
* @param <R>
*/
public interface GenericService <I,R>{
List<R> test1(I i);
}
泛型方法
/**
* 此方法可以定义泛型类中,也可以定义在普通类中,即泛型方法不一定定义在泛型类中
* <U,R> 即为为该方法定义了两个泛型U,R 定义的泛型可以作为方法的入参类型和返回类型,以及方法中的变量类型
* 入参和返回类型可以是泛型或者具体的数据类型;例如testGeneric1,testGeneric2
* @param u
* @param r
* @param <U>
* @param <R>
*/
public <U,R> void testGeneric(U u,R r){
// do something
}