1. Основная концепция дженериков
Как C#, Java имеет концепцию дженериков и параметризацию типов. Дженерики в Java появляются после JDK5.0, но дженерики в Java по существу отличаются от дженериков в C#. Прежде всего, с точки зрения типов сбора, Arraylist <Integer> и Arraylist <string> в Java - один и тот же тип. Исправление типа будет выполняться во время компиляции, а типы в Java - это псевдогенерика. Псевдогенерика будет введена позже. Во -вторых, при добавлении основных типов данных в коллекцию, такие как Int, INT сначала будет преобразована в целочисленный объект, который мы обычно называем операцией бокса. При извлечении элементов межгенный объект необходимо преобразовать в тип значения int, то есть операция распаковки. В C#, List <int> и List <string> - разные типы. Общие параметры будут заполнителем после компиляции и не будут стерты. Им назначены реальные типы во время выполнения. Они генерируются во время выполнения системы и имеют свои собственные таблицы виртуальных методов и данные типа. Эта реализация называется инфляцией типа (для инфляции типа мгновенный компилятор проделал большую работу по оптимизации для решения этой проблемы). Это так называемые истинные дженерики. В то же время, добавляя основные элементы, такие как INT, в коллекцию, нет необходимости в коробке, и при выходе элементов не требуется распаковка. Следовательно, производительность лучше, чем дженерика Java Collection.
Введение дженериков в Java в основном для решения двух задач: 1. Запасные исключения типа происходят во время выполнения элемента типа сбора, а проверки типа добавляются во время типа времени компиляции. 2. Повторите написание кода во время решения, и алгоритм можно использовать повторно. Ниже приведен пример, чтобы проиллюстрировать проверку типа компилятора.
Во -первых, давайте посмотрим на пример, где не используются дженерики:
ArrayList al = new ArrayList (); al.add ("ABC"); al.add ("124"); al.add ("32L");Мы можем добавить любой тип данных в коллекцию AL. Когда нам нужно преобразовать тип при получении данных, например:
String s = (string) al.get (0); string s1 = (string) al.get (1); // В период прогона будет сообщена ошибка, и ошибка преобразования типа будет длинной l = (длинная) al.get (2);
Из этого мы видим, что когда нет дженериков, проверка типов уменьшается во время компиляции. При извлечении элементов программисты должны знать типы каждого элемента, в противном случае исключение преобразования типа может возникнуть во время выполнения.
Итак, давайте посмотрим на преимущества, которые он приносит нам через общие коллекции.
Arraylist <string> al1 = new ArrayList <string> (); Al1.add ("abc"); al1.add (1); // произошла ошибка во время компиляции,Когда мы создаем экземпляры Al1 с типом параметра строки, мы не можем добавить элемент Int, в противном случае компилятор сообщит об ошибке. Обычно в редакторе IDE будет отметка ошибки, например, Eclipse. В то же время нет необходимости печатать конверсию при извлечении элемента.
строка значения = al1.get (0); // не требуется преобразование типа
Это преимущество дженериков.
Затем мультиплексирование алгоритмов в основном отражается в мультиплексировании методов, таких как метод добавления ArrayList, который можно использовать на любом типе или ограниченном типе.
2. Использование дженериков
Дженерики в Java используются в основном в классах, методах и интерфейсах. Во -первых, давайте кратко рассмотрим использование класса:
класс фабрика <t> {private t value; public t getValue () {return Value; } public void setValue (t v) {this.value = v; }}Добавить метод испытания:
Factory <string> f = Новая завод <string> (); F.SetValue («Фабрика в использовании»); System.out.println (f.getValue ());
Использование общих интерфейсов:
Интерфейс myInterface <t, u> {void show (t t, u u); } класс ShowTest реализует myInterface <string, integer> {@Override public void show (string t, integer u) {System.out.println (t); System.out.println (u); }}Когда общий параметр типа действует в классе, он в основном ограничивает ограничения типа между несколькими полями и подписями метода. При действующем на методе основные ограничения делаются на нескольких параметрах метода. Здесь общие параметры типа метода больше не будут приведены примеры. Давайте в основном введем ограничения параметров типа ниже.
3. Тип ограничения параметров
Давайте посмотрим на небольшой пример, как показано в следующем коде:
public static <t> t get (t t1, t t2) {if (t1.compareto (t2)> = 0); // ошибка компиляции, метод сравнение (t) не определен для типа T. return t1; }Вы можете увидеть сообщение об ошибке компилятора. Метод сравнения не определяется для типа T. Если типы необходимо сравнить в Java, необходимо реализовать сопоставимый интерфейс, так что метод переопределен. Затем мы делаем следующие изменения:
public static <t Extens сопоставимо> t get (t t1, t t2) {// Добавить ограничение типа if (t1.compareto (t2)> = 0); вернуть T1; }Квалификации T расширяется сопоставимо, он показывает, что T-тип интерфейса, который реализует сопоставимый, а также также реализует метод сравнения, поэтому не будет ошибок времени компиляции.
Когда мы используем и сегментируйте несколько ограничений типов, мы можем использовать и сегментировать ограниченные ключевые слова, и можно использовать только расширение. В то же время, когда существуют как интерфейсы, так и типы, класс может быть размещен только первым и может иметь только один, как показано ниже:
<T расширяет объект и сопоставимый и сериализуемый>
Приведенная выше статья кратко обсуждает роль, и основные концепции Java Generics - это весь контент, которым я делюсь с вами. Я надеюсь, что вы можете дать вам ссылку, и я надеюсь, что вы сможете поддержать Wulin.com больше.