面向对象程序设计(泛型)

泛型

泛型的核心思想就是参数化类型,也就是说,我们可以编写出适用于多种类型的代码,而不必为每种类型都重复编写相似的代码。

比如,我们可以定义一个泛型类或方法,让它可以处理不同类型的数据,而不需要针对每种类型都写一份代码。这不仅提高了代码的重用性,还使得我们在编写代码时更容易发现和避免类型相关的错误。

假设我们要定义一个简单的泛型类,比如一个盒子,可以放入不同类型的物品。我们可以这样写:

public class Box<T> {
    private T content;

    public void put(T item) {
        this.content = item;
    }

    public T get() {
        return content;
    }
}

这里的 <T> 就表示这是一个泛型类,T 是类型参数。我们可以用不同的类型替代 T,比如 Integer、String 等。这让我们可以创建一个可以存放各种类型的盒子。

类型擦除

Class c1 = new ArrayList<String>().getClass();
Class c2 = new ArrayList<int>().getClass();

c1和 c2 满足 c1==c2

c1c2 是否相等取决于泛型的类型。在 Java 中,泛型的类型信息在运行时会被擦除,所以 ArrayList<String>ArrayList<int> 的运行时类型都是 ArrayList

通配符

通配符是 Java 泛型中的一种用法,用于增加泛型类型的灵活性。通配符有两种:`?` 和 `<? extends T>`。

1. **`?` 通配符:**
   - `?` 表示未知类型,通常用于声明泛型方法或接口中的参数类型。
   - 例如,你可以声明一个接受任意类型的 List 的方法:
     ```java
     public void printList(List<?> list) {
         for (Object item : list) {
             System.out.print(item + " ");
         }
         System.out.println();
     }
     ```
     在这里,`List<?>` 表示可以接受任何类型的 List。

2. **`<? extends T>` 通配符:**
   - `<? extends T>` 表示类型的上界,通常用于限制泛型的范围。
   - 例如,你可以声明一个接受类型为 `Number` 或其子类的 List 的方法:
     ```java
     public void printNumberList(List<? extends Number> list) {
         for (Number item : list) {
             System.out.print(item + " ");
         }
         System.out.println();
     }
     ```
     在这里,`<? extends Number>` 表示可以接受类型为 `Number` 或其子类的 List。

使用通配符能够增加方法或接口的灵活性,使其能够处理更广泛的数据类型。但需要注意的是,在使用通配符时,你无法往带有通配符的集合中添加元素,因为无法确定要添加的元素的确切类型。

 

相关推荐

  1. 面向对象程序设计

    2023-12-28 02:20:02       57 阅读
  2. 面向对象程序设计

    2023-12-28 02:20:02       34 阅读
  3. C#面向对象程序设计

    2023-12-28 02:20:02       54 阅读
  4. TypeScript中对象

    2023-12-28 02:20:02       56 阅读
  5. TS学习02 面向对象 类、封装继承、接口、

    2023-12-28 02:20:02       32 阅读
  6. Python之面向对象程序设计

    2023-12-28 02:20:02       73 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-28 02:20:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-28 02:20:02       106 阅读
  3. 在Django里面运行非项目文件

    2023-12-28 02:20:02       87 阅读
  4. Python语言-面向对象

    2023-12-28 02:20:02       96 阅读

热门阅读

  1. 【vscode插件】之插件图标设置

    2023-12-28 02:20:02       67 阅读
  2. C/C++ const

    2023-12-28 02:20:02       62 阅读
  3. Linux Ubuntu安装nodejs

    2023-12-28 02:20:02       54 阅读
  4. arm day7

    arm day7

    2023-12-28 02:20:02      56 阅读
  5. python虚拟环境及其在项目实践中的应用

    2023-12-28 02:20:02       58 阅读
  6. Sqlserver数据库触发器sql案例

    2023-12-28 02:20:02       63 阅读
  7. Redis——IO多路复用

    2023-12-28 02:20:02       61 阅读
  8. CTE和递归查询

    2023-12-28 02:20:02       57 阅读
  9. Best Arm Identification in Batched Multi-armed Bandit Problems

    2023-12-28 02:20:02       46 阅读
  10. 【Qt-正则表达式】

    2023-12-28 02:20:02       59 阅读