Каким образом, как универсальный параметр типа говорит, “расширяется” Сопоставимый не “реализации”? [дубликат]

11
задан Mr_and_Mrs_D 8 April 2014 в 16:34
поделиться

3 ответа

Если вы хотите использовать то, что реализует, вы просто пишете, является общим параметр

class Bar extends  Foo<String> { /* Code */}

Подстановочный знак, о котором вы говорите, - это три

  1. «? extends Type»: обозначает семейство подтипов типа Type. Этот является наиболее полезным подстановочным знаком
  2. «? super Type»: обозначает семейство супертипов типа
  3. «?»: обозначает набор всех типов или любого

Ваш метод должен выглядеть как

public static <T extends Comparable<? super T>> Collection<T> sort(T[] list) {

        Collection<T> list = new ArrayList<T>();

         //do quicksort
        Arrays.sort(arr);

        Collection<T> list = new ArrayList<T>();
        int i;
        for(i=0; i<arr.length-1; i++) {
            if(arr[i].compareTo(arr[i+1]) != 0) { //if not duplicate, add to the list
                list.add(arr[i]);
            }
        }
        list.add(arr[i]); //add last element
//btw how do You know that last is not duplicate 
        return list;

}

Подробнее посетите эту страницу

5
ответ дан 3 December 2019 в 07:36
поделиться

Например, E может быть интерфейсом.

1
ответ дан 3 December 2019 в 07:36
поделиться

Это просто соглашение, выбранное для дженериков. При использовании параметров ограниченного типа вы используете extends (хотя в некоторых случаях это может означать implements) или super.

Вы даже можете сделать что-то вроде & Cloneable>, чтобы определить, что объект, который заменит параметр типа, должен реализовать оба этих интерфейса.

10
ответ дан 3 December 2019 в 07:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: