Как использовать дженерики для указания отношений суперкласса с типом Comparable

Я создал метод getMax, который принимает и массив Comparable в качестве параметра и сравнивает элементы, чтобы найти максимальный элемент, но мне также нужно реализовать дженерики, чтобы указать отношения суперкласса, и я действительно не понимаю, как бы я это сделал. Ниже приведен src для моего неуниверсального метода.

public static Comparable getMax(Comparable [] array){
    Comparable max=array[0];
    for(int x=0; x<array.length;x++){
        if(array[x].compareTo(max)==1)
            max=array[x];
    }
    return max;
}

person Joe Butler    schedule 05.02.2019    source источник


Ответы (1)


Вы можете переписать свой метод getMax с помощью дженериков следующим образом:

public static <T extends Comparable<T>> T getMax(T[] array){
    T max=array[0];
    for(int x=0; x<array.length;x++){
        if(array[x].compareTo(max)==1)
            max=array[x];
    }
    return max;
}

(Видите ли, хитрость заключается в замене Comparable на T и объявлении T как Comparable<T>.)

Затем, например, вы можете использовать его так:

String[] strings = { "Bob", "Alice", "Charlie" };
String maxString = getMax(strings);  // gives "Charlie"
person Thomas Fritsch    schedule 05.02.2019
comment
а еще лучше <T extends Comparable<? super T>> - person newacct; 04.04.2019