泛型
感觉不知道不影响审代码,但是看见题目代码有很多这种,还是特地学了下
泛型的作用:对重复的类型减少代码量
定义类的时候尖括号里声明占位符如\<T>,里面就用T定义自由类型的变量
实例化类的时候在占位符里里面声明什么是T即可
和Object有点像,其实编译的时候泛型就是会擦除,当成Object处理的
对于泛型方法也是类似
尖括号内的占位符后面加extends,就可以限制传入的类必须是某类的子类
由于泛型不存在继承,所以如果想打印任意类型的List,就要用到通配符:?
demo:
Printer.java
import java.util.List;
public class Printer<T,K> {
public void print(T content,K value){
System.out.println(content);
System.out.println(value);
}
public static <T,K> void sprint(T content,K value){
System.out.println("This is static print():"+content);
System.out.println(value);
}
// 加extends限制了传入的类必须是某个类的子类
public static <T extends Vehicle> void sprintCar(T content){
System.out.println("Vehicle is : "+content);
}
public static void printlist(List<Integer> content){
System.out.println(content);
}
//由于泛型不存在继承,所以如果想打印任意类型的List,不能用List<Object>作为参数
//解决方法:引入通配符
public static void printlist1(List<?> content){
System.out.println(content);
}
}
main.java
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
Printer<String,Integer> p = new Printer<>();
p.print("hello,world",123);
Printer.sprint(321,new Car());
Printer.sprintCar(new Car());
List<Integer> ls = new ArrayList<>();
ls.add(123);
ls.add(789);
Printer.printlist1(ls);
List<String> ls1 = new ArrayList<>();
ls1.add("hello");
ls1.add("world");
Printer.printlist1(ls1);
}
}
Comments NOTHING