Что означает синтаксис <E> в Java?

Я быстро нашел ответ, но не смог найти / придумать точные параметры поиска.

Я учу себя Java, но не могу найти смысл определенного синтаксиса.

public class Node<E>{
    E elem;
    Node<E> next, previous;
}

Что это <E> означает? Я смутно помню скобки со стрелками, имеющие отношение к векторам, но, основываясь на приведенном выше коде, я чувствую, что это связано с перечислениями.

Любая помощь или разъяснения будет принята с благодарностью. Спасибо.

4 ответа

Решение

Это называется Generics.

В общем, они позволяют типам (классам и интерфейсам) быть параметрами при определении классов, интерфейсов и методов.

Использование обобщений дает много преимуществ по сравнению с использованием неуниверсального кода, как показано ниже из учебного руководства по Java:

  • Более строгие проверки типов во время компиляции. Компилятор Java применяет строгую проверку типов к общему коду и выдает ошибки, если код нарушает безопасность типов. Исправить ошибки во время компиляции проще, чем исправить ошибки во время выполнения, что может быть трудно найти.

    Например:

    // without Generics
    List list = new ArrayList();
    list.add("hello");
    
    // With Generics
    List<Integer> list = new ArrayList<Integer>();
    list.add("hello"); // will not compile
    
  • Включение программистов для реализации общих алгоритмов. Используя универсальные шаблоны, программисты могут реализовывать универсальные алгоритмы, которые работают с коллекциями различных типов, могут быть настроены, безопасны для типов и легче читаются.

  • Устранение слепков.

    Например, следующий фрагмент кода без шаблонов требует приведения:

    List list = new ArrayList();
    list.add("hello");
    String s = (String) list.get(0);
    

    При переписывании для использования обобщений код не требует приведения:

    List<String> list = new ArrayList<String>();
    list.add("hello");
    String s = list.get(0); // no cast
    

Вот <E> обозначает параметр типа класса Node. Параметр типа определяет, что он может ссылаться на любой тип (например, String, Integer, Employee и т. д.). Обобщения Java имеют соглашения об именах параметров типа, например:

  1. T - Тип
  2. Е - Элемент
  3. K - Ключ

  4. N - номер

  5. V - значение

Например, возьмите следующий сценарий

public class Node<E>{
   E elem;
   Node<E> next, previous;
}
class Test{
   Node<String> obj = new Node<>();
}

Для вышеупомянутого scenerio, в фоновом режиме класс узла "E" будет ссылаться на тип String, и класс будет выглядеть следующим образом

public class Node<String>{
   String elem;
   Node<String> next,previous;
}

Не только String вы также можете использовать Integer,Character,Employee и т. Д. В качестве параметра типа.

Вы также можете использовать дженерики с интерфейсом, методом и конструктором.

Для больше о дженериках посетите эти:

https://www.journaldev.com/1663/java-generics-example-method-class-interface https://www.javatpoint.com/generics-in-java

Узел подразумевает класс "Дженерики".

См. http://docs.oracle.com/javase/tutorial/java/generics/types.html

Это синтаксический способ Java для указания универсального типа. По сути, это просто означает, что это может быть объект Node, который может принимать любой тип.

Вы должны проверить это для хорошего турориала на дженериках Java

Другие вопросы по тегам