本文将通过一个实际示例,来深入解说 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 类:
- class Info<T> {
- private T data;
- public void set(T data) {
- this.data = data;
- }
- public T get() {
- return data;
- }
- }
复制代码
- T 是一个泛型参数,表示可以存储任意类型的数据。
- set 方法用于设置数据。
- get 方法用于获取数据。
(2)解决方案类 Solution
接下来,我们实现 Solution 类,其中包含 upperLimit 和 lowerLimit 方法。
- class Solution {
- public Number upperLimit(Info<? extends Number> info) {
- // 直接返回 info 中存储的数据
- return info.get();
- }
- public Object lowerLimit(Info<? super String> info) {
- // 直接返回 info 中存储的数据
- return info.get();
- }
- }
复制代码
- upperLimit 方法:接收一个泛型类型为 ? extends Number 的 Info 对象,表示该对象只能存储 Number 类型或其子类(比方 Integer、Double 等)。
- lowerLimit 方法:接收一个泛型类型为 ? super String 的 Info 对象,表示该对象只能存储 String 类型或其父类(比方 Object)。
(3)主函数
最后,在主函数中测试以上方法。
- public class Main {
- public static void main(String[] args) {
- // 创建 Solution 对象
- Solution solution = new Solution();
- // 测试 upperLimit 方法
- Info<Integer> info = new Info<>();
- info.set(200); // 设置值为 200
- Number number = solution.upperLimit(info);
- if (!number.equals(200)) {
- System.out.println("Verification failure.");
- return;
- }
- // 测试 lowerLimit 方法
- Info<String> infos = new Info<>();
- infos.set("Xx"); // 设置值为 "Xx"
- Object obj = solution.lowerLimit(infos);
- if (!obj.equals("Xx")) {
- System.out.println("Verification failure.");
- return;
- }
- System.out.println("Verification passed.
- ");
- }
- }
复制代码 4. 运行结果
假如实现无误,运行步伐后会输出:
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企服之家,中国第一个企服评测及商务社交产业平台。 |