Что <и> означает, как реализующие сопоставимые ?
-
19-08-2019 - |
Вопрос
В Java 1.4.2, учебный класс java.math.BigInteger
реализует интерфейсы Comparable
, Serializable
.
В Java 1.5.0, учебный класс java.math.BigInteger
реализует интерфейсы Serializable
, Comparable<BigInteger>
.
Это всего лишь пример, который поможет мне спросить о <
а также >
. Анкет Что мне действительно интересно, так это <
а также >
вещи.
Мой вопрос в три раза:
- что это
<BigInteger>
частьimplements
Заявление означает? - Как называется этот синтаксис?
- А что это делает?
PS: действительно сложно Google для <
а также >
и невозможно искать так <
а также >
в первую очередь.
Спасибо!
Решение
Читать Учебник Java Generics. Анкет Вещество между угловыми кронштейнами - это параметр типа - сопоставимый - это общий класс, и в этом случае угловые кронштейны означают, что класс сравняется с другими Bigintegers.
Для немного большего разъяснения в этом случае взгляните на Javadocs для сопоставимого в 1.5. Обратите внимание, что это объявлено как Comparable<T>
, и что compareTo
Метод принимает аргумент типа T
. Анкет T - это параметр типа, который «заполнен», когда используется интерфейс. Таким образом, в этом случае заявив, что вы реализуете Comparable<BigInteger>
подразумевает, что у вас должен быть compareTo(BigInteger o)
метод Другой класс может реализовать Comparable<String>
это означает, что он должен был бы реализовать compareTo(String o)
метод
Надеюсь, вы сможете увидеть выгоду от вышеупомянутого фрагмента. В 1.4, подпись compareTo
мог только когда -либо взять Object
Поскольку все виды классов реализованы сопоставимыми, и не было никакого способа точно узнать, что нужно. Однако с помощью Generics вы можете указать, что вы сопоставимы в отношении конкретного класса, а затем написать более конкретный метод сравнения, который принимает этот класс только в качестве параметра.
Преимущества здесь два раза. Во -первых, вам не нужно делать instanceof
Проверьте и актерский состав в реализации вашего метода. Во -вторых, компилятор может сделать гораздо большую проверку типа во время компиляции - вы не можете случайно передать строку во что -то, что реализует Comparable<BigInteger>
, поскольку типы не совпадают. Для компилятора гораздо лучше указывать на это вам, а не привести к этому исключению времени выполнения, как это обычно произошло в негенерическом коде.
Другие советы
Я почти уверен, что это общие
http://java.sun.com/j2se/1.5.0/docs/guide/language/generics.html
Я спросил что -то подобное (C#), у него есть полезная информация там Что делает методu003CClassName> иметь в виду?