Прочитайте Обучающее руководство по 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>
, так как типы не совпадают. Гораздо лучше, если компилятор может указать вам на это, а не вызывать исключение времени выполнения, как это обычно бывает в неуниверсальном коде.