一.泛型
泛型是一种允许程序员在强类型程序设计语言中编写代码时使用一些以后才指定的类型,在实例化时作为参数指明这些类型。
为什么要用泛型呢?当你封装一个类或方法时,希望根据参数来执行程序时,也就是事先不知道参数类型时,你就能用到泛型.
有点抽象,举个例子:集合类collection,用来装集合对吧?但是你事先知道你要装什么集合吗?
你希望什么集合都能装就得用泛型了
泛型的使用就是用占位符(大写字母),如T,K,E等来表示参数
二.泛型类
泛型最基础的就是泛型类了,使用就是在类名后面加占位符,表示该类中的占位符类型
用<类型占位符,类型占位符>表示,可以有多个类型占位符
class User<T,K>{
private T password;
private K age;
public static void main(String[] args) {
User<String,Integer> user = new User<>();
user.password = "abc";
user.age = 18;
System.out.println();
}
public T getPassword() {
return password;
}
public void setPassword(T password) {
this.password = password;
}
public K getAge() {
return age;
}
public void setAge(K age) {
this.age = age;
}
}
三.泛型方法
一.普通方法
方法中的参数类型可以用类型占位符替代
class User<T,K>{
public void setPassword(T password) {
this.password = password;
}
二.静态方法
静态方法不属于类的对象,所以在方法头中声明其泛型
public static <W> W getInformation(W information){
System.out.println(information);
return information;
}
综上,只要是方法都可以自定义泛型类型
四.泛型接口
注意两点
1.泛型接口的实现类可以指定具体的泛型接口的具体泛型实现
2.泛型接口的实现类如果没有指定具体的泛型,则必须在类中声明一个展位类型
//泛型接口
interface User<T>{
public void show(T information);
}
//1.泛型接口的实现类可以指定具体的泛型接口的具体泛型实现
class UserImpl1 implements User<Integer>{
@Override
public void show(Integer information) {
System.out.println(information);
}
}
//2.泛型接口的实现类如果没有指定具体的泛型,则必须在类中声明一个展位类型
class UserImpl2<T> implements User<T>{
@Override
public void show(T information) {
System.out.println(information);
}
}