MST

星途 面试题库

面试题:Java泛型方法与边界的实际运用

请编写一个Java泛型方法,该方法接收一个实现了Comparable接口的泛型类型数组,并返回数组中的最大元素。同时说明如何通过设置泛型边界来保证代码的正确性和灵活性。
35.5万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试
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;
    }
}

泛型边界的设置说明

  1. 设置泛型边界的方式:在方法签名中,<T extends Comparable<T>> 这部分定义了泛型 T 的边界。这里 extends 关键字表明 T 必须是实现了 Comparable<T> 接口的类型。这样做确保了传入的数组元素类型 T 具有 compareTo 方法,从而可以在方法内部进行比较操作。
  2. 保证正确性:通过设置 T extends Comparable<T> 泛型边界,编译器会在编译时检查传入的数组元素类型是否实现了 Comparable<T> 接口。如果没有实现,编译器会报错,从而保证了在 findMax 方法内部调用 compareTo 方法时不会出现运行时错误,确保了代码的正确性。
  3. 保证灵活性:使用泛型使得该方法可以处理各种实现了 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);
    }
}