Chociaż starałem się rozwiązać ćwiczenia from generics tutorial Q&A Moje odpowiedzi były nieco odmienneJak napisać ogólną metodę znajdowania maksymalnego elementu i wywoływania tej metody?
moje odpowiedzi
public static <T extends Comparable<? super T>>
T max(List<? extends T> list, int begin, int end) //Option1
public static <T extends Comparable<T>>
T max(List<? extends T> list, int begin, int end) //Option2
z cytowanej odpowiedzi poniżej
Więc moje pytanie brzmi
Opcja 1 : Czy to by miało jakikolwiek wpływ, gdyby
T extends Object & Comparable<? super T>
zostaje zastąpione przezT extends Comparable<? super T>
. Czy nie jest to domniemanaextends Object
?Opcja 2: Czy zmieniłoby się, gdyby
Comparable<? super T>
zastąpionoComparable<T>
? Jeśli tak to jak ?Uzupełnianie kodu Eclipse tworzy lokalną zmienną
List<? extends Comparable<? super Comparable<? super T>>> list;
na Ctrl + 1max(list, 1, 10);
, która jest nieco dłuższa. Jak zdefiniować klasy (hierarchię), która rozszerza się oComparable<? super T>
, tworzy listę i dodaje instancje do listy i wywołuje poniższą metodę? Zasadniczo chcę wiedzieć, jak wywołaćmax()
po dodaniu instancji klasyA or B
do listy gdzieclass B extends A
napisać metodę rodzajową znaleźć element maksymalny w zakresie [początek, koniec) lista.
Odpowiedź:
import java.util.*;
public final class Algorithm {
public static <T extends Object & Comparable<? super T>>
T max(List<? extends T> list, int begin, int end) {
T maxElem = list.get(begin);
for (++begin; begin < end; ++begin)
if (maxElem.compareTo(list.get(begin)) < 0)
maxElem = list.get(begin);
return maxElem;
}
}
Częściowa odpowiedź tutaj: http://stackoverflow.com/questions/10339338/t-extends-object-e-vs-t-extends-e –
Naprawdę nie rozumiem twojego trzeciego pytania. Czy możesz trochę to rozwinąć? –
Dla jakiego wywołania metody zaćmienie należy utworzyć tę zmienną lokalną? Nie rozumiem, dlaczego miałby to zrobić. Przynajmniej zagnieżdżony Porównywalny rodzajowy typ nie jest tutaj naprawdę rozsądny. –