面试题答案
一键面试public class GenericMaxFinder {
public static <T extends Comparable<T>> T findMax(T[] array) {
if (array == null || array.length == 0) {
return null;
}
T max = array[0];
for (T element : array) {
if (element.compareTo(max) > 0) {
max = element;
}
}
return max;
}
}
泛型边界的设置说明
- 设置泛型边界的方式:在方法签名中,
<T extends Comparable<T>>
这部分定义了泛型T
的边界。这里extends
关键字表明T
必须是实现了Comparable<T>
接口的类型。这样做确保了传入的数组元素类型T
具有compareTo
方法,从而可以在方法内部进行比较操作。 - 保证正确性:通过设置
T extends Comparable<T>
泛型边界,编译器会在编译时检查传入的数组元素类型是否实现了Comparable<T>
接口。如果没有实现,编译器会报错,从而保证了在findMax
方法内部调用compareTo
方法时不会出现运行时错误,确保了代码的正确性。 - 保证灵活性:使用泛型使得该方法可以处理各种实现了
Comparable
接口的类型数组,而不是局限于某一种具体类型。例如,既可以处理Integer[]
,也可以处理String[]
(因为String
实现了Comparable<String>
)等,提高了代码的复用性和灵活性。
你可以通过以下方式调用这个方法:
public class Main {
public static void main(String[] args) {
Integer[] intArray = {1, 5, 3};
Integer maxInt = GenericMaxFinder.findMax(intArray);
System.out.println("Max integer: " + maxInt);
String[] stringArray = {"apple", "banana", "cherry"};
String maxString = GenericMaxFinder.findMax(stringArray);
System.out.println("Max string: " + maxString);
}
}