Java 泛型上下限详解:以 Info 泛型类和方法实现为例

打印 上一主题 下一主题

主题 878|帖子 878|积分 2634



本文将通过一个实际示例,来深入解说 Java 泛型中的上下限及其应用场景。在这个示例中,我们会实现一个泛型类 Info 和两个泛型方法 upperLimit 和 lowerLimit,并表明其工作机制。

1. 什么是 Java 泛型上下限?

Java 泛型的上下限是通过关键字 extends 和 super 定义的。它们的作用是对泛型类型参数施加束缚,规定可接受的类型范围。


  • 上限通配符 ? extends T:限定泛型类型必须是 T 类型或其子类。
  • 下限通配符 ? super T:限定泛型类型必须是 T 类型或其父类。

2. 示例场景

我们会创建一个泛型类 Info 用于存储数据,随后实现两个方法:

  • upperLimit:接收一个 Info 类型对象,其泛型类型是 Number 或其子类,返回存储的数据。
  • lowerLimit:接收一个 Info 类型对象,其泛型类型是 String 或其父类,返回存储的数据。
最后,通过一个主函数对方法举行验证。

3. 代码实现

(1)泛型类 Info

起首,我们实现 Info 类:
  1. class Info<T> {
  2.     private T data;
  3.     public void set(T data) {
  4.         this.data = data;
  5.     }
  6.     public T get() {
  7.         return data;
  8.     }
  9. }
复制代码


  • T 是一个泛型参数,表示可以存储任意类型的数据。
  • set 方法用于设置数据。
  • get 方法用于获取数据。

(2)解决方案类 Solution

接下来,我们实现 Solution 类,其中包含 upperLimit 和 lowerLimit 方法。
  1. class Solution {
  2.     public Number upperLimit(Info<? extends Number> info) {
  3.         // 直接返回 info 中存储的数据
  4.         return info.get();
  5.     }
  6.     public Object lowerLimit(Info<? super String> info) {
  7.         // 直接返回 info 中存储的数据
  8.         return info.get();
  9.     }
  10. }
复制代码


  • upperLimit 方法:接收一个泛型类型为 ? extends Number 的 Info 对象,表示该对象只能存储 Number 类型或其子类(比方 Integer、Double 等)。
  • lowerLimit 方法:接收一个泛型类型为 ? super String 的 Info 对象,表示该对象只能存储 String 类型或其父类(比方 Object)。

(3)主函数

最后,在主函数中测试以上方法。
  1. public class Main {
  2.     public static void main(String[] args) {
  3.         // 创建 Solution 对象
  4.         Solution solution = new Solution();
  5.         // 测试 upperLimit 方法
  6.         Info<Integer> info = new Info<>();
  7.         info.set(200); // 设置值为 200
  8.         Number number = solution.upperLimit(info);
  9.         if (!number.equals(200)) {
  10.             System.out.println("Verification failure.");
  11.             return;
  12.         }
  13.         // 测试 lowerLimit 方法
  14.         Info<String> infos = new Info<>();
  15.         infos.set("Xx"); // 设置值为 "Xx"
  16.         Object obj = solution.lowerLimit(infos);
  17.         if (!obj.equals("Xx")) {
  18.             System.out.println("Verification failure.");
  19.             return;
  20.         }
  21.         System.out.println("Verification passed.
  22. ");
  23.     }
  24. }
复制代码

4. 运行结果

假如实现无误,运行步伐后会输出:
  1. Verification passed.
复制代码

5. 解析



  • 泛型上限 ? extends Number

    • 在 upperLimit 方法中,Info<? extends Number> 表示该 Info 对象只能存储 Number 或其子类的数据。
    • 在实际代码中,传入了 Info<Integer> 对象,Integer 是 Number 的子类,因此符合限定。

  • 泛型下限 ? super String

    • 在 lowerLimit 方法中,Info<? super String> 表示该 Info 对象只能存储 String 或其父类的数据。
    • 在实际代码中,传入了 Info<String> 对象,String 符合限定。


6. 总结

通过上述代码,我们可以看到:

  • 泛型上限 ? extends T 用于限定泛型类型为某个类型 T 或其子类。
  • 泛型下限 ? super T 用于限定泛型类型为某个类型 T 或其父类。
  • Info 泛型类 是存储数据的基础,其泛型特性使其能适应多种数据类型。
通过这些特性,Java 的泛型机制让代码更安全、更灵活,同时淘汰了类型转换的贫苦。在实际开发中,善用泛型上下限可以帮助我们构建更健壮的代码。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

南飓风

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表