java 泛型通过编译期的类型检查机制,在集合中提供类型安全。具体做法是在声明集合变量时指定类型参数,例如 list<string></string>,这样编译器会强制要求所有存入的元素都必须是该类型,并在尝试插入不兼容类型时报错。这种机制消除了传统集合需要手动进行向下转型(casting)的麻烦,避免了 classcastexception 运行时异常的发生。

如何定义一个支持泛型的自定义集合类
要创建一个支持泛型的自定义集合类,需要在类名后添加类型参数声明,如 <t></t>,并在内部使用 T 来替代具体的数据类型。这样,该类可以存储任何类型的对象,同时保持类型安全。开发者只需实例化时指定具体类型,即可复用同一套逻辑处理不同数据。

import java.util.ArrayList;
import java.util.List;
// 定义一个泛型容器类
public class GenericContainer<T> {
private List<T> items = new ArrayList<>();
// 添加元素,编译器会自动检查类型
public void add(T item) {
items.add(item);
}
// 获取元素,无需强制转换
public T get(int index) {
return items.get(index);
}
public static void main(String[] args) {
// 实例化时指定类型为 String
GenericContainer<String> stringContainer = new GenericContainer<>();
stringContainer.add("Hello");
// stringContainer.add(123); // 编译错误:类型不匹配
String value = stringContainer.get(0);
System.out.println("Value: " + value);
// 实例化时指定类型为 Integer
GenericContainer<Integer> intContainer = new GenericContainer<>();
intContainer.add(100);
Integer num = intContainer.get(0);
System.out.println("Number: " + num);
}
}
泛型方法如何在非泛型类中实现类型安全
即使类本身不是泛型类,也可以定义泛型方法来实现类型安全。在方法签名中使用独立的类型参数(如 <e></e>),该方法可以接受任意类型的参数并返回相应类型的结果。这种方式常用于工具类中,允许在不改变类结构的情况下,为特定操作提供类型安全的接口。
掌握 ES6+ 特性,包括 async/await、解构、扩展运算符、箭头函数、Promise、模块、迭代器、生成器以及函数式编程模式,编写简洁高效的 Java
立即学习“Java免费学习笔记(深入)”;

import java.util.Arrays;
import java.util.List;
import java.util.Collections;
public class Utility {
// 定义一个泛型方法,用于将数组转换为列表
public static <T> List<T> arrayToList(T[] array) {
return Arrays.asList(array);
}
// 定义一个泛型方法,用于查找列表中的最大值
public static <T extends Comparable<T>> T findMax(List<T> list) {
if (list == null || list.isEmpty()) {
return null;
}
T max = list.get(0);
for (T item : list) {
if (item.compareTo(max) > 0) {
max = item;
}
}
return max;
}
public static void main(String[] args) {
// 测试 arrayToList
String[] strArray = {"A", "B", "C"};
List<String> strList = Utility.arrayToList(strArray);
System.out.println("String List: " + strList);
Integer[] intArray = {1, 5, 3};
List<Integer> intList = Utility.arrayToList(intArray);
System.out.println("Integer List: " + intList);
// 测试 findMax
List<Integer> numbers = Arrays.asList(10, 20, 30, 40, 50);
Integer maxNum = Utility.findMax(numbers);
System.out.println("Max Number: " + maxNum);
List<String> words = Arrays.asList("apple", "banana", "cherry");
String maxWord = Utility.findMax(words);
System.out.println("Max Word: " + maxWord);
}
}
当传入 null 值时泛型集合的行为是什么
当向泛型集合中传入 null 值时,其行为与普通集合完全一致,即允许存储 null。这是因为 Java 泛型中的类型参数 T 默认可以是任何引用类型,而 null 是所有引用类型的子类型。因此,List<string></string> 可以包含 null,但读取时必须小心处理空指针异常。如果希望禁止 null,需在使用前显式检查或依赖外部约束。

















