题目
实现一个泛型方法检查元素是否在数组中
信息
- 类型:问答
- 难度:⭐
考点
泛型方法定义,类型安全,通配符使用
快速回答
实现步骤:
- 定义泛型方法:
<T> boolean contains(T[] array, T element) - 使用
for-each循环遍历数组 - 用
equals()方法比较元素 - 注意空值安全处理
示例代码:
public static <T> boolean contains(T[] array, T element) {
if (array == null) return false;
for (T item : array) {
if (element == null ? item == null : element.equals(item))
return true;
}
return false;
}
## 解析
原理说明
泛型方法允许在方法签名中声明类型参数(如<T>),使方法能处理不同类型的数据而无需重写。本例中:
- 类型安全:编译器确保传入的数组和元素类型一致
- 代码复用:同一方法可处理
String[]、Integer[]等不同类型 - 避免强制转换:直接使用泛型类型
T,消除运行时ClassCastException风险
完整代码示例
public class GenericExample {
// 泛型方法实现
public static <T> boolean contains(T[] array, T element) {
if (array == null) return false;
for (T item : array) {
if (element == null) {
if (item == null) return true;
} else if (element.equals(item)) {
return true;
}
}
return false;
}
public static void main(String[] args) {
// 测试String类型
String[] words = {"Java", "Generics", "Example"};
System.out.println(contains(words, "Generics")); // true
// 测试Integer类型
Integer[] numbers = {1, 2, 3};
System.out.println(contains(numbers, 5)); // false
}
}最佳实践
- 空值安全:始终检查数组是否为
null,并正确处理element为null的情况 - 使用equals而非==:对象比较应使用
equals(),基础类型数组需用包装类(如Integer[]而非int[]) - 限制类型范围:若需比较功能,可定义
<T extends Comparable<T>>增强类型约束
常见错误
- 忽略空指针:未检查
array==null会导致NullPointerException - 错误比较:使用
==比较对象(比较引用而非值) - 基础类型误用:尝试用
int[]调用方法(泛型不支持基础类型)
扩展知识
- 通配符进阶:若需支持子类型,可改为
boolean contains(T[] array, ? extends T element) - 性能优化:大型数组可改用
Arrays.asList(array).contains(element)(内部使用索引遍历) - Java标准库:类似实现可参考
java.util.Collections中的泛型方法