泛型分类
泛型有三种使用方式:
泛型类:
在定义类时使用类型参数,这样类就可以被用于各种数据类型。声明泛型类非常简单,只需要在类名后添加一对尖括号,里面写上类型参数即可。
// T1, T2, ..., Tn 是类型参数,它们在实例化泛型类时被替换为具体的类型。
class className {
private T1 t1;
private T2 t2;
public void set(T t) {
this.t1 = t;
}
}
泛型接口
public interface Generator {
T next();
}
实现泛型接口时,可以选择指定具体类型,也可以继续保持泛型。
public class NumberGenerator implements Generator {
private int index = 0;
public Integer next() {
return index++;
}
}
泛型方法
泛型方法是在方法级别使用泛型,即方法可以在调用时确定泛型参数的具体类型。可以在泛型类使用,也可以再非泛型类中使用。
泛型方法的类型参数放在修饰符(如 public、static 等)之后,返回类型之前。
<类型参数T>必不可少,这表明这是一个泛型方法,并且声明了一个泛型T。这个类型参数T可以出现在这个泛型方法的任意位置,泛型的数量也可以为任意多个
语法:
修饰符 <类型参数T> 返回类型 方法名(参数列表) {
// 方法体
}
示例:
public class Util {
public static boolean compare(Pair p1, Pair p2) {
return p1.getKey().equals(p2.getKey()) && p1.getValue().equals(p2.getValue());
}
}
在这个示例中,compare方法是一个泛型方法,它有两个类型参数K和V,用于比较两个Pair对象的键和值是否相等。
泛型方法可以是静态的,也可以是实例的。在静态泛型方法中,类型参数是在调用方法时确定的,与类实例无关。