diff --git a/docs/chapter05.md b/docs/chapter05.md index c672e8e..689470b 100644 --- a/docs/chapter05.md +++ b/docs/chapter05.md @@ -219,76 +219,108 @@ public class StreamExample { 通过使用 Stream API,开发者可以写出更加高效、简洁且易于维护的代码。这对于处理大量数据集尤其有用,同时也提高了代码的可读性和可维护性。 -#### 5.1.5 泛型(了解) +### 5.1.5 泛型(了解) -##### 什么是泛型? -Java 中的泛型是一种通用的编程技术,它可以让我们在写代码时更加灵活、安全和高效。 +#### 什么是泛型? -泛型是为了解决Java中类型安全的问题而被引入的。在早期版本的Java中,所有的集合类都是基于Object类型实现的,这意味着我们可以将任意类型的对象添加到集合中,但是取出时需要进行类型转换,如果转换错误就会抛出ClassCastException异常。当我们使用泛型时,可以在编译期间检查类型,从而避免这类异常的发生。 -##### 泛型的优点 -- 类型安全性:通过泛型可以在编译时检查类型,避免了运行时出现类型转换异常等问题。 -- 代码重用性:通过泛型可以编写通用的代码,提高代码的可重用性和可维护性。 -- 性能优化:通过泛型可以避免了不必要的类型转换,提高程序的运行效率。 +Java 中的泛型是一种通用的编程技术,它允许我们在编写代码时更加灵活、安全和高效。泛型的主要目的是解决 Java 中类型安全的问题。在 Java 的早期版本中,所有的集合类都是基于 `Object` 类型实现的,这意味着可以将任意类型的对象添加到集合中。然而,在取出元素时需要进行显式类型转换,如果转换错误,就会抛出 `ClassCastException` 异常。通过使用泛型,可以在编译阶段检查类型,从而避免这类异常的发生。 -##### 泛型的语法 +#### 泛型的优点 + +- **类型安全性**: 泛型允许在编译时检查类型,避免了运行时出现类型转换异常等问题。 +- **代码重用性**: 泛型可以让开发者编写通用的代码,提高代码的可重用性和可维护性。 +- **性能优化**: 泛型可以避免不必要的类型转换,提高程序的运行效率。 + +#### 泛型的语法 泛型主要包括三个部分:泛型类、泛型接口和泛型方法。 -###### 泛型类和泛型接口 +##### 泛型类和泛型接口 + 泛型类和泛型接口是最常见的泛型形式。我们可以通过在类或接口名后面添加一对尖括号来声明一个或多个类型参数。 ```java public class MyClass { - // ... + private T data; + + public MyClass(T data) { + this.data = data; + } + + public T getData() { + return data; + } } public interface MyInterface { - // ... + void add(K key, V value); } ``` -当我们使用泛型类或泛型接口时,我们可以使用具体的类型来替换类型参数。 +当我们使用泛型类或泛型接口时,可以使用具体的类型来替换类型参数。 + ```java -MyClass myClass = new MyClass<>(); -MyInterface myInterface = new MyInterface<>(); +MyClass myClass = new MyClass<>("Hello, World!"); +MyInterface myInterface = new MyInterface() { + @Override + public void add(Integer key, String value) { + // 实现逻辑 + } +}; ``` -###### 泛型方法 -除了类和接口之外,我们还可以定义泛型方法,它们在方法返回类型前面加上一对尖括号,表示该方法有一个或多个类型参数。 + +##### 泛型方法 + +除了类和接口之外,我们还可以定义泛型方法,这些方法在方法签名前加上一对尖括号,表示该方法有一个或多个类型参数。 + ```java public class MyUtils { public static T getLast(List list) { + if (list.isEmpty()) { + return null; + } return list.get(list.size() - 1); } } ``` -当我们使用泛型方法时,我们可以在方法调用时,为类型参数传入具体的类型。 -```java -List names = List.of("Alice", "Bob", "Charlie"); -String last = MyUtils.getLast(names); +当我们使用泛型方法时,可以显式或隐式地为类型参数传入具体的类型。 +```java + List names = List.of("Alice", "Bob", "Charlie"); + String last = MyUtils.getLast(names); // 隐式类型推断 + String lastExplicit = MyUtils.getLast(names); // 显式指定类型 ``` -##### 泛型的应用 +#### 泛型的应用 -泛型是一种非常通用的编程技术,我们可以用它来编写各种各样的通用数据结构和工具类。 +泛型是一种非常通用的编程技术,可以用它来编写各种各样的通用数据结构和工具类。 -###### List 和 Map +##### List 和 Map + +Java 内置的 `List` 和 `Map` 类型都支持泛型,可以用来存储任意类型的对象。 -Java 内置的 List 和 Map 类型都支持泛型,它们可以用来存储任意类型的对象。 ```java -List numbers = new ArrayList<>(); -numbers.add(1); -numbers.add(2); -numbers.add(3); - -Map scoreMap = new HashMap<>(); -scoreMap.put("Alice", 90); -scoreMap.put("Bob", 80); -scoreMap.put("Charlie", 70); + List numbers = new ArrayList<>(); + numbers.add(1); + numbers.add(2); + numbers.add(3); + + Map scoreMap = new HashMap<>(); + scoreMap.put("Alice", 90); + scoreMap.put("Bob", 80); + scoreMap.put("Charlie", 70); ``` +#### 小结 + +- **类型安全**: 泛型可以确保类型在编译时得到验证,避免运行时的类型转换错误。 +- **代码重用**: 泛型允许编写通用的代码,提高代码的可重用性。 +- **性能提升**: 泛型可以减少不必要的类型转换,提高程序的运行效率。 + +通过使用泛型,开发者可以写出更加健壮、可读性强和易于维护的代码。 + ### 5.2 Spring框架简介(了解) #### 5.2.1 Spring框架的历史和发展