Java程序设计 泛型【二】

85 阅读2分钟

这是我参与2022首次更文挑战的第10天,活动详情查看:2022首次更文挑战

Java程序设计 泛型【二】

泛型接口

[访问权限] interface 接口名称<泛型标识>{
}
interface Info<T>{
}

方法一 在子类的定义上声明泛型类型

interface Info<T>{
    public T getVar();
}
class Infolmpl<T> implements  Info<T>{
    private T var;
    public Infolmpl(T var){
        this.setVar(var);
    }

    public void setVar(T var) {
        this.var = var;
    }

    @Override
    public T getVar() {
        return var;
    }
}
public class Hello {
    public static void main(String[] args) {
        Info<String> i = new Infolmpl<String>("ABC");
        System.out.println(i.getVar());
    }
}

image-20220126142640803

方法二 直接在接口中指定具体类型

interface Info<T>{
    public T getVar();
}
class Infolmpl implements Info<String>{
    private String var;
    public Infolmpl(String var){
        this.setVar(var);
    }

    public void setVar(String var) {
        this.var = var;
    }

    @Override
    public String getVar() {
        return var;
    }
}
public class Hello {
    public static void main(String[] args) {
        Info<String> i = new Infolmpl("ABC");
        System.out.println(i.getVar());
    }
}

image-20220126143314608

直接在实现的接口处指定了具体的泛型类型String,这样在覆写Info接口中的getVar()方法时直接指明类型为String即可

泛型方法

定义语法

[访问权限]<泛型标识> 泛型标识 方法名称([泛型标识 参数名称])

定义泛型方法

将接收的参数直接返回,而且因为在方法接收参数中使用了泛型操作,所以此方法可以接收任意类型的数据,而且此方法的返回值类型将由泛型指定

class Test{
    public <T> T fun(T t){
        return t;
    }
}
public class Hello {
    public static void main(String[] args) {
        Test d = new Test();
        int a = d.fun(45);
        String s = d.fun("ABC");
        System.out.println(a);
        System.out.println(s);
    }
}

image-20220126151727723

通过方法返回泛型类实例

class Info<T extends Number>{
    private T var;

    public T getVar() {
        return var;
    }

    public void setVar(T var) {
        this.var = var;
    }
    public String toString(){
        return this.var.toString();
    }
}
public class Hello {
    public static void main(String[] args) {
        Info<Integer> a = fun(50);
        System.out.println(a.getVar());
    }
    public static <T extends Number> Info<T> fun(T a){
        Info<T> temp = new Info<T>();
        temp.setVar(a);
        return temp;
    }
}

image-20220126152939005

使用泛型统一传入的类型

class Info<T>{
    private T var;

    public T getVar() {
        return var;
    }

    public void setVar(T var) {
        this.var = var;
    }
    public String toString(){
        return this.var.toString();
    }
}
public class Hello {
    public static void main(String[] args) {
        Info<Integer> a =new Info<Integer>();
        Info<Integer> b =new Info<Integer>();
        a.setVar(45);
        b.setVar(56);
        sum(a,b);
    }
    public static <T> void sum(Info<T> a,Info<T>b){
        System.out.println(a);
        System.out.println(b);
    }
}

image-20220126154500159

传入其他类型数据则报错

image-20220126154559357

泛型数组

public class Hello {
    public static void main(String[] args) {
        String s[] = f1("A","B","C");
        f2(s);
    }
    public static <T> T[] f1(T...a){
        return a;
    }
    public static <T> void f2(T param[]){
        for(T t : param){
            System.out.println(t);
        }
    }
}

image-20220126162308439