【Java学习笔记】35:泛型类和泛型方法

本文深入讲解Java泛型的概念及应用,包括泛型类与泛型方法的定义与使用实例。通过具体的代码示例展示了如何创建泛型类和泛型方法,并演示了不同类型参数的运用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

泛型使程序代码与类型无关,从而实现程序代码的重用,如前面学的集合都有一个抽象的类型参数,在使用时可以被指定为任何数据类型。

[1]泛型类

package day35;

//一个类型参数的泛型类
class AnyType<T>{
    private T obj;

    public AnyType(T obj) {
        this.obj = obj;
    }

    public T getObj() {
        return obj;
    }

    public void setObj(T obj) {
        this.obj = obj;
    }

    //show the type of T
    public void showType(){
        System.out.println(this.obj+":"+this.obj.getClass().getName());
    }
}

public class Test {

    public static void main(String[] args) {
        AnyType<String> at=new AnyType<String>("Hello");
        at.showType();

        AnyType<Integer> at2=new AnyType<Integer>(100);
        at2.showType();

        Person p=new Person("lzh");
        AnyType<Person> at3=new AnyType<Person>(p);
        at3.showType();
    }

}

class Person{
    private String name;

    public Person(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return name;
    }

}

运行结果:
Hello:java.lang.String
100:java.lang.Integer
lzh:day35.Person

package day35;
//多类型参数的泛型类
class Pair<T1,T2>{
    private T1 first;
    private T2 second;

    @Override
    public String toString() {
        return first+":"+second;
    }

    public Pair(T1 first, T2 second) {
        this.first = first;
        this.second = second;
    }

    public T1 getFirst() {
        return first;
    }
    public void setFirst(T1 first) {
        this.first = first;
    }
    public T2 getSecond() {
        return second;
    }
    public void setSecond(T2 second) {
        this.second = second;
    }

}

public class Test {

    public static void main(String[] args) {
        Pair<String,String> p1=new Pair<String,String>("8/29","lzh");
        System.out.println(p1);
    }
}

运行结果:
8/29:lzh

[2]泛型方法
除了定义泛型类之外,Java中在普通的类里还可以定义泛型方法。
泛型方法的抽象类型参数是介于返回值和修饰符之间的。

package day35;
//储存了三个静态的泛型方法的普通类
class Myclass{
    public static <T> T FunMid(T[] a){
        return a[a.length/2];
    }

    public static <T> T FunFst(T[] a){
        return a[0];
    }

    public static <T> T FunLst(T[] a){
        return a[a.length-1];
    }

}
public class Test {

    public static void main(String[] args) {
        String[] a={"Tomcat","Hadoop","Flask","Flora","Django"};
        System.out.print(Myclass.<String>FunFst(a)+" ");
        System.out.print(Myclass.FunMid(a)+" ");//具体类型常可以省略
        System.out.println(Myclass.FunLst(a));

        Integer[] b={1,2,3,4,5,6};
        System.out.print(Myclass.<Integer>FunFst(b)+" ");
        System.out.print(Myclass.FunMid(b)+" ");//具体类型常可以省略
        System.out.println(Myclass.FunLst(b));

        Person[] c={new Person("lzh",2),new Person("SB",2),new Person("Other",1)};
        System.out.print(Myclass.<Person>FunFst(c)+" ");
        System.out.print(Myclass.FunMid(c)+" ");//具体类型常可以省略
        System.out.println(Myclass.FunLst(c));

    }
}

class Person{
    String name;
    int id;

    public Person(String name, int id) {
        this.name = name;
        this.id = id;
    }

    @Override
    public String toString() {
        return id+":"+name;
    }
}

运行结果:
Tomcat Flask Django
1 4 6
2:lzh 2:SB 1:Other

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值