Общий интерфейс - Java - PullRequest
       11

Общий интерфейс - Java

0 голосов
/ 19 февраля 2012

Если у меня есть следующий код:

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

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

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

Ответы [ 4 ]

3 голосов
/ 19 февраля 2012

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

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

2 голосов
/ 19 февраля 2012

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 голосов
/ 19 февраля 2012

Для <? super T> документация гласит:

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

0 голосов
/ 19 февраля 2012

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...