2012-02-18 5 views
0

Если у меня есть следующий код:Общий интерфейс - Java

public interface BinaryTree<T extends Comparable<? super T>>{} 

Это означает, что это интерфейс, который принимает объект, которые реализуют Comparable правильно? Что означает <?Super T>?

И следующее, если я хочу написать реализацию для BinaryTree Как должно выглядеть замедление класса?

ответ

3

<? super T> означает «любой суперкласс (или суперинтерфейс) Т» (как @GETah цитирует документацию.)

Итак, ваш класс будет выглядеть примерно так: public class MyBinaryTree<T extends Comparable<? super T>> implements BinaryTree<T> {...} - вам нужно указать общий параметр MyBinaryTree для совместимости с требуемым интерфейсом.

+0

Может ли он иметь T также? –

+0

Можете ли вы привести пример того, чего вы пытаетесь достичь? Зачем вам нужен другой 'T', если у вас есть уже связанный? Вы можете использовать любое обозначение любого другого необходимого вам типа (например, «E» или «MY_TYPE» или любого другого, но соглашение должно использовать «UPPERCASE»). –

2

Java определяет «?» Как неизвестный тип. Для универсального типа G экземпляр типа G является супертипом всех экземпляров другого типа.

Переменные неизвестного типа не могут быть присвоены и являются , считающимися объектом при чтении.

public void foo(G<?> g) { 
    Object o = g.e; // Allowed 
    g.e = new Object(); // Not allowed 
} 

Например печать всей коллекции:

void print(Collection<?> c) { 
    for(Object e: c) { 
    System.out.println(e); 
    } 
} 

Это работает потому, что коллекция является супер-тип всех коллекций.

Предки неизвестного типа, отмеченные G<? extends X>, позволяют читать экземпляр неизвестного типа.
Потомок неизвестного типа с пометкой G<? super Y> позволяет записать экземпляр неизвестного типа.

0

BinaryTree принимает параметр типа, и параметр типа должен быть классом, который является Comparable с экземплярами само по себе, или один из его суперкласса.

Скажите, если у вас есть класс Frobgit, который объявлен как implements Comparable<Frobgit>, это будет действительный параметр типа для BinaryTree. Если он был объявлен как implements Comparable<Object>, это также было бы хорошо.

A BinaryTree Необходимо сравнить объекты, которые хранятся в нем, и это гарантирует,

0

Для <? super T>, то documentation говорит:

Синтаксис? супер T обозначает неизвестный тип, который супертипом Т

Смежные вопросы