java泛型概念与通配符含义初探

一般类和方法,只能使用具体的类型:要么是基本类型,要么是自定义的类。如果要编写可以应用与多重类型的代码,这种刻板的限制对代码的束缚就会很大。

泛型的概念:
泛型实现了参数化类型的概念,使代码可以应用于多重类型。“泛型”这个术语的意思是:适用于许多许多的类型。泛型在编程语言中出现时,其最初的目的是希望类或方法能够具备最广泛的表达能力。
泛型的类型擦除:
java泛型是用擦除来实现的,这意味着当你在使用泛型时,任何具体的类型信息都被擦除了,你唯一知道的就是你在使用一个对象。例如List<String>和List<Integer>在运行时事实上是相同的类型,这两种形式都被擦除成他们最"原生"类型,即List。泛型只在编译阶段有效,泛型类型在逻辑上可以看成是多个不同的类型,但是其实质都是同一个数据类型,编译之后,程序会才去去泛型化措施。

**

泛型通配符<? 继承 ?>的分类与含义:

**
泛型类型参数将擦除到它的第一个边界。

1、无边界通配符
<?> 通配符理解
我们知道ArrayList 是典型的泛型类.即可以限制存储的元素的元素类型.ArrayList<String>指定存入的元素时string. ArrayList<Integer>指定存储元素为Integer类型. 但是如果只有我们使用的时候才能明确知道存入类型时.我们可以使用ArrayList<?> 来表示通用的类型.

public static void main(String[] args) {
    List<String> list1 = new ArrayList<>();
    list1.add("zhangsan");
    List<Number> list2 = new ArrayList<>();
    list2.add(3);
    list2.add(4);
    loop(list1);
    loop(list2);
}

public static void loop(List<?> list){
    for (int i = 0 ; i < list.size() ; i++) {
        System.out.println(list.get(i));
    }
}

案例中的 ? 代表着限定通用类型. 或者这么理解.代表可变的参数类型

2、上界通配符
<? extends Number > 代表参数是从Number往下的子类或者孙类对象都是可以的.
在这里插入图片描述
3、下界通配符
<? super Integer> 代表从Integer 到 Object 所有对象都是可以的。
在这里插入图片描述

草草总结下当前的理解,欢迎指正问题与补充理解方式!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值