Java范型 (Java Generics)

本文深入探讨了Java泛型的基本概念,包括类型参数列表、通配符的使用、上界和下界的定义,以及如何在实际代码中应用这些概念。文章还讨论了泛型方法的应用场景和类型擦除的影响。

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

在Java集合类中看到的List<e>这样的声明方式,<e>称为类型参数列表。当你使用这样的类的时候,需要提供相应的绑定类型。在类型声明中每次出现的类型参数符号,被称为裸类型变量。比如,get方法返回的是V,而不是Object。

Java通过擦除参数类型信息来创建一个等价的类型。每个类型参数都关联一个上界,默认是java.lang.Object。客户代码的绑定信息被擦除,并被替换成相应的类型转换。
声明:
</e></e>
java 代码
  1. import java.util.*;
  2. public class MultiHashMap
  3. private Mapnew HashMap
  4. public int size() {
  5. return map.size();
  6. }
  7. public void put(K key, V value) {
  8. List<v> values = map.get(key); </v>
  9. if (values == null) {
  10. values = new ArrayList<v>(); </v>
  11. map.put(key, values);
  12. }
  13. values.add(value);
  14. }
  15. public List<v> get(K key) { </v>
  16. return map.get(key);
  17. }
  18. }
擦除之后:
java 代码
  1. import java.util.*;
  2. public class MultiHashMap {
  3. private Map map = new HashMap();
  4. public int size() {
  5. return map.size();
  6. }
  7. public void put(Object key, Object value) {
  8. List values = (List)map.get(key);
  9. if (values == null) {
  10. values = new ArrayList();
  11. map.put(key, values);
  12. }
  13. values.add(value);
  14. }
  15. public List get(Object key) {
  16. return (List)map.get(key);
  17. }
  18. }



所有类型参数的默认上界是Object。可以限制为另外一个上界。使用extends就可以了。

当你不关心参数绑定的具体类型的时候,可以使用通配符?。不能把一个List<string>的引用赋给一个List的引用。通配符可以与extends结合起来使用。

当一个方法的参数与它的另一个参数或是返回值的类型之间存在依赖的时候,应该使用范型方法;否则,应该使用通配符。

上界的通配符,在读取一个数据结构的时候是有用的;当写入一个数据结构的时候,可以使用下界通配符。
使用super可以指定下界。

可以在extends中指定附加的边界或是多个类型。第一个约束可以是接口或是类,接下来的约束必须是接口。通过附加边界,你可以限制参数实现多个接口。
java 代码
  1. public static
  2. <t>extends Iterable&Comparable<t>> </t>void iterateAndCompare(T t) </t>


可以通过checked wrapper来解决遗留代码的类型安全问题。

不能创建已经绑定的参数类型的数组。

不能使用裸类型变量来创建新的对象。不能把裸类型变量作为instanceof操作符的目标。

通过反射不能知道类型变量的绑定信息,因为擦除机制的存在。</string>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值