Java泛型
泛型,即参数化类型,就是将数据类型由原来的具体类型参数化!
泛型的使用
泛型类
//定义一个泛型类
public class ClassName<T> {
private T data;
public T getData(){
return data;
}
public void setData(T data){
this.data = data;
}
}
//创建对象
ClassName<String> object1 = new ClassName<>();
ClassName<String> object2 = new ClassName<String>();
泛型接口
//定义一个泛型接口
public interface InterfaceName<T>{
T getData();
}
//实现接口
//1.指定类型
public class1 implements InterfaceName<String>{
private String text;
public String getData(){
return text;
}
}
//2.不指定类型
public class1<T> implements InterfaceName<T>{
private T data;
public T getData(){
return data;
}
}
泛型方法
//返回值类型为T类型,参数类型为T类型的方法
public T fun(T arg1, T arg2){
...
}
泛型限制类型
在使用泛型时, 可以指定泛型的限定区域 , - 例如: 必须是某某类的子类或 某某接口的实现类,格式: <T extends 类或接口1 & 接口2>
//苹果类实现了水果接口
interface Fruit{}
class Apple implements Fruit{}
class Plate<T extends Fruit>{}
//装着苹果的盘子,不能装不是水果的东西
Plate<Apple> palte = new Plate<>();
泛型中的通配符?
类型通配符是使用?代替方法具体的类型实参。
<? extends Parent> 指定了泛型类型的上届
interface Fruit{}
class Apple implements Fruit{}
class Plate<T>{}
Plate<? extends Fruit> plate = new Plate<Apple>();
<? super Child> 指定了泛型类型的下届
Plate<? super Apple> plate = new Plate<Fruit>();
<?> 指定了没有限制的泛型类型
Plate<?> plate1 = new Plate<Apple>();
Plate<?> plate2 = new Plate<String>();
Plate<?> plate3 = new Plate<Dog>();