完美演示Java泛型的上下界限(extends 与 super)

泛型上下限的基本概念

  1. extends

    • 用于指定泛型的上限,即泛型类型必须是指定类型的子类型或者是指定类型本身。
    • 通常用于限定泛型的类型参数,保证泛型类型不超过指定的类型。
  2. super

    • 用于指定泛型的下限,即泛型类型必须是指定类型的父类型或者是指定类型本身。
    • 通常用于限定泛型的类型参数,保证泛型类型不会低于指定的类型。

详细说明

1. extends 关键字
  • 定义: T extends Bound 表示泛型 TBound 类型或其子类型。可以指定多个上限,用 & 分隔,但其中一个上限必须是 Object

  • 示例:

class Animal { }
class Dog extends Animal { }
class Cat extends Animal { }

// 定义一个方法,该方法可以接收Dog和Cat对象
public <T extends Animal> void addAnimal(T animal) {
    // 这里你可以使用animal作为Animal类型
}

// 使用示例
addAnimal(new Dog()); // 合法
addAnimal(new Cat()); // 合法
  • 作用: 使用extends来限制泛型类型,使其能够接受Animal及其子类。这确保了在调用addAnimal方法时,传入的对象是Animal的实例或其子类的实例。

2. super 关键字
  • 定义: T super Bound 表示泛型 TBound 类型或其父类型。可以用来指定类型的最小界限,保证泛型类型至少是Bound类型。

  • 示例:

class Animal { }
class Dog extends Animal { }
class Cat extends Animal { }

// 定义一个方法,该方法可以接收Animal及其父类对象
public void addAnimal(List<? super Dog> list) {
    list.add(new Dog()); // 合法
    // list.add(new Cat()); // 编译错误,因为Cat不是Dog的超类
}

// 使用示例
List<Animal> animalList = new ArrayList<>();
addAnimal(animalList); // 合法
  • 作用: 使用super来确保集合的元素类型至少是Dog的超类,这样可以安全地添加Dog对象到集合中。注意,不能添加Dog以外的其他子类型,比如Cat

总结

  • extends 限定了泛型类型必须是某个指定类型的子类或该类型本身。用于读操作,确保泛型类型符合上界的要求。

  • super 限定了泛型类型必须是某个指定类型的父类或该类型本身。用于写操作,确保泛型类型不低于下界的要求。

这两种用法帮助你在编写泛型代码时能够更好地控制类型的范围,确保代码的类型安全和灵活性。

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值