JAVA基础-泛型

发布于 2024-08-05  89 次阅读


泛型

感觉不知道不影响审代码,但是看见题目代码有很多这种,还是特地学了下
泛型的作用:对重复的类型减少代码量
定义类的时候尖括号里声明占位符如\<T>,里面就用T定义自由类型的变量
实例化类的时候在占位符里里面声明什么是T即可
image_mak
image_mak
和Object有点像,其实编译的时候泛型就是会擦除,当成Object处理的
image_mak
对于泛型方法也是类似
image_mak
image_mak
尖括号内的占位符后面加extends,就可以限制传入的类必须是某类的子类
image_mak
image_mak
由于泛型不存在继承,所以如果想打印任意类型的List,就要用到通配符:?
image_mak
image_mak
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);
    }
}

image_mak

A web ctfer from 0RAYS
最后更新于 2024-08-24