Что <и> означает, как реализующие сопоставимые ?

StackOverflow https://stackoverflow.com/questions/450520

Вопрос

В 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> иметь в виду?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top