对泛型的理解

本文介绍了Java泛型的基本概念,包括类型参数化、泛型类、接口和方法的使用,以及泛型带来的类型安全提升。讲解了泛型可擦写和通配符的概念,以及它们在上下界的限制。

1.什么是泛型

泛型本质是指类型参数化。意思是允许在定义类、接口、方法时使用类型形参,当使用时指定具体类型,所有使用该泛型参数的地方都被统一化,保证类型一致。如果未指定具体类型,默认是Object类型。集合体系中的所有类都增加了泛型,泛型也主要用在集合。

2.为什么需要泛型

在没有泛型之前(JDK1.5之前),许多错误只能在运行才可以发现,通过引入泛型,可以使其部分错误在编译期就报错,大大提高了代码的健壮性。
具体好处为:
1.编译时确定类型,保证类型安全,避免类型转换异常。
2.避免了强制类型转换。
3.代码利于重用,增加通用性。

3.泛型怎么使用

一般泛型使用是3种方式:
泛型类:public class Demo<T> {} ,T表示未知类型。
泛型接口:public interface ImplDemo<T,V>{} ,和定义类一样(接口就是一个特殊类)。
泛型方法:public <T> void demo1(T name){System.out.println(name);} , public <T> T demo2(T t){ return t;}

4.泛型可擦写是什么意思

拿代码举例:

public static void main(String[] args) {
        // TODO Auto-generated method stub
        List<String> ll = new ArrayList<>();
        List<Integer> kk = new ArrayList<>();
        System.out.println(ll.getClass());//输出:class java.util.ArrayList
        System.out.println(kk.getClass());//输出:class java.util.ArrayList
        System.out.println(ll.getClass() == kk.getClass());//输出:true
 
    }

如上述代码所示,最终系统返回结果是true,说明List<Integer> 和List<String>只是在编译期间有效果,当代码在实际运行时,会自动转化成class java.util.ArrayList

5.什么是通配符

除了用 <T> 表示泛型外,还有 <?> 这种形式。? 被称为通配符。

6.通配符上、下界

<?> 被称作无限定的通配符。

<? extends T> 被称作有上限的通配符。

<? super T> 被称作有下限的通配符。

在JDK集合Collection种,对通配符的引用,可以去参考JDK源码。

<think>嗯,用户想了解的概念、用法和示例。首先,我需要从系统指令开始,确保回答符合格式要求。比如,数学表达式要用$...$,独立公式用$$...$$,中文回答,还要生成相关问题。用户提供的引用资料主要是Java和C#的,所以可能需要结合这些例子。 首先,的定义是什么?根据引用[1],允许在定义类、接口或方法时使用类参数,提高代码重用和类安全。用户可能想知道为什么需要,比如避免类转换错误,比如在集合中使用前,取元素可能需要强制转换,容易出错。例如,引用[2]提到通常用于集合,所以需要举一个集合的例子,比如List<String>,这样编译时就能检查类,避免运行时错误。 然后,如何使用?用户可能需要分点说明,比如在类、接口、方法中使用。引用[3]提到方法使用,可能需要给出示例代码,比如public <T> void method(T param)。同时,引用[4]给出了C#的字典和集合例子,可以对比说明不同语言的语法差异,但用户主要问的是的一般概念,可能不需要深入特定语言,但示例部分可以提到不同语言的实现。 示例部分,可能需要展示一个类的定义,比如Box<T>,然后展示如何用不同类实例化。比如Box<String>和Box<Integer>。代码部分要符合格式,用反引号包裹,并注明语言。例如Java的示例代码,如class Box<T> { ... }。 注意事项部分,可以提到类擦除,比如Java的在运行时类信息被擦除,而C#保留了类信息。此外,限制,比如不能使用基本类,需要装箱,或者通配符的使用,如<? extends Number>。 然后生成相关问题,比如的类擦除是什么,不同语言的实现差异,通配符的作用等。需要确保问题与内容相关,并且能引导用户进一步学习。 需要检查是否所有数学表达式都正确使用了$符号,比如如果有公式的话,但这里可能用不上。回答结构要清晰,分点解释概念、用法、示例和注意事项。引用标识要自然地加在引用内容的末尾,比如引用[1]到[4]对应的位置。 最后,确保使用中文,避免使用Markdown格式,代码块用三个反引号包裹,并标明语言。生成的相关问题要放在最后,用
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值