java泛型使用

本文介绍了Java泛型的概念及其使用,包括如何定义泛型类、泛型方法和泛型接口,以及通配符的上界、下界和无界通配符的运用,旨在提高代码的灵活性、可读性和可维护性。

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

一、Java泛型是什么?

Java泛型是一种非常重要的特性,它可以使我们在编写Java代码时更为灵活,同时也可以提高代码的可读性和可维护性。在本文中,我们将介绍如何使用Java泛型,包括如何定义泛型类、泛型方法、泛型接口以及如何使用通配符和类型参数等。

二、泛型使用

1.定义泛型类

定义泛型类的方式很简单,只需要在类名后面加上一对尖括号,然后指定泛型类型即可。

public class Demo6_generic {
    public static void main(String[] args){
        //加了泛型只能添加对应的类型,安全
        Tool<String> t = new Tool<>();
        t.set("heo");
        System.out.println(t.get());
    }
}
class Tool<T>{
    private T q;
    public void set(T q){
        this.q = q;
    }
    public T get()
    {
        return q;
    }

}

2.泛型方法

定义泛型方法的方式与定义泛型类类似,只需要在方法名前面加上一对尖括号,然后指定泛型类型即可。

class Tool<T>{
    private T q;
    public void set(T q){
        this.q = q;
    }
    public T get()
    {
        return q;
    }
    //泛型方法,返回值类型是K
    public static <K> K demo1(K value){
        K val = value;
        return val;
    }
}

3.泛型接口

泛型接口和泛型类的定义很相似

public interface Inter<T> {
    public void show(T t);
    //泛型接口方法
    public <K> K display(K value);
}

4.通配符上界

<? extends T>,在类型参数中使用 extends 表示这个泛型中的参数必须是 E 或者 E 的子类

public class Demo7_generic {
    public static void main(String[] args){
        //高级泛型,?代表任意类型,? extends E:父类是E ,?是子类
        List<Father> fathers = new ArrayList<>();
        List<Son> sons = new ArrayList<>();
        demo3.test(fathers);
        demo3.test(sons);
    }
}
class demo3{
    public static <T> void test(List<? extends Father> list){
        System.out.println(list);
    }
}
class Father{ }
class Son extends Father{}

5.通配符下界

public class Demo7_generic {
    public static void main(String[] args){
        //高级泛型,?代表任意类型,? extends E:父类是E ,?是子类
        List<Father> fathers = new ArrayList<>();
        List<Son> sons = new ArrayList<>();
        demo3.test(fathers);
        demo3.test(sons);
    }
}
class demo3{
    public static <T> void test(List<? super Father> list){
        System.out.println(list);
    }
}
class Father{ }
class Son extends Father{}

6.无界通配符

<?>,即类型参数可以是任何类型

无边界的通配符的主要作用就是让泛型能够接受未知类型的数据

public static void main(String[] args) {
    List<Integer> arrays = Arrays.asList(1, 1, 1);
    List<String> arrayString = Arrays.asList("1", "1", "1");
    printList(arrays);
    printList(arrayString);

}

public static void printList(List<?> list) {
    for (Object elem : list) {
        System.out.print(elem + "");
    }
    System.out.println();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝朽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值