Что означает <и>, например, реализует Comparable <BigInteger>? - PullRequest
6 голосов
/ 16 января 2009

В Java 1.4.2 , класс java.math.BigInteger реализует интерфейсы Comparable, Serializable.

В Java 1.5.0 , класс java.math.BigInteger реализует интерфейсы Serializable, Comparable<BigInteger>.

Это просто пример, чтобы помочь мне спросить о < и >. Что меня действительно интересует, так это < и >.

Мой вопрос тройной:

  • что означает <BigInteger> часть оператора implements?
  • как называется этот синтаксис?
  • и что это делает?

P.S .: Гугл действительно трудно для < и > и невозможно найти SO для < и >, во-первых.

Спасибо!

Ответы [ 2 ]

19 голосов
/ 16 января 2009

Прочитайте Обучающее руководство по Java Generics . Между угловыми скобками есть параметр типа - Comparable является универсальным классом, и в этом случае угловые скобки означают, что этот класс сопоставим с другими BigIntegers.

Для более подробного объяснения в этом случае взгляните на Javadocs для Comparable в 1.5. Обратите внимание, что он объявлен как Comparable<T>, а метод compareTo принимает аргумент типа T. T - это параметр типа, который «заполняется» при использовании интерфейса. Таким образом, в этом случае объявление о реализации Comparable<BigInteger> подразумевает, что у вас должен быть метод compareTo(BigInteger o). Другой класс может реализовать Comparable<String>, что означает, что ему придется реализовать метод compareTo(String o).

Надеюсь, вы увидите выгоду из приведенного выше фрагмента. В версии 1.4 подпись compareTo могла принимать только Object, поскольку все виды классов реализовали Comparable, и не было никакого способа точно узнать, что нужно. Однако с помощью обобщений вы можете указать, что вы сравнимы по отношению к определенному классу, а затем написать более конкретный метод compareTo, который принимает в качестве параметра только этот класс.

Преимущества здесь двоякие. Во-первых, вам не нужно делать instanceof проверку и приведение в реализации вашего метода. Во-вторых, компилятор может выполнять гораздо больше проверок типов во время компиляции - вы не можете случайно передать String во что-то, что реализует Comparable<BigInteger>, так как типы не совпадают. Гораздо лучше, если компилятор может указать вам на это, а не вызывать исключение времени выполнения, как это обычно бывает в неуниверсальном коде.

5 голосов
/ 16 января 2009

Я уверен, что это Generics

http://java.sun.com/j2se/1.5.0/docs/guide/language/generics.html

Я спросил что-то похожее (C #), там есть полезная информация Что означает метод ?

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