Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> java

Оператор Java Diamond:упрощение дженериков в Java 7+

Оператор Java Diamond

Оператор ромба был представлен в Java 7, чтобы сделать код более читаемым для универсальных шаблонов. Общий — это тип аргумента. Используя generic, мы можем передать любой тип объекта для обработки методами класса. Например, если мы создаем список строк до Java 7, нам нужно использовать следующий синтаксис для создания экземпляра списка строк с помощью объекта ArrayList.

List<String> listOfStrings = new ArrayList<String>();

Начиная с Java 7, мы можем использовать оператор ромба, чтобы упростить приведенный выше синтаксис следующим образом:

List<String> listOfStrings = new ArrayList<>();

Но его нельзя было использовать с внутренними классами Anonymous. Например, мы не можем опустить тип объекта в операторе ромба в приведенном ниже синтаксисе до версии Java 9.

Handler<Integer> intHandler = new Handler<Integer>(1) {
 @Override
 public void handle() {
 System.out.println(content);
 }
};

Оператор Diamond в анонимном классе

В Java 9 оператор ромба также можно использовать с анонимным классом для упрощения кода и улучшения читаемости.

Handler<Integer> intHandler = new Handler<>(1) {
 @Override
 public void handle() {
 System.out.println(content);
 }
};

Оператор Diamond в Java 7, Java 8

В приведенном ниже примере мы создали анонимные классы для абстрактного класса Handler, принимающего общий аргумент и передающего тип объекта при создании анонимного класса, поскольку нам необходимо передать аргумент типа, иначе программа не скомпилируется.

Пример

public class Tester {
 public static void main(String[] args) {
 // create an Anonymous class to handle 1
 // Here we need to pass Type arguments in diamond operator 
 // before Java 9 otherwise compiler will complain error
 Handler<Integer> intHandler = new Handler<Integer>(1) {
 @Override
 public void handle() {
 System.out.println(content);
 }
 };
 intHandler.handle();
 // create an Anonymous class to handle 2 
 Handler<? extends Number> intHandler1 = new Handler<Number>(2) {
 @Override
 public void handle() {
 System.out.println(content);
 }
 };
 intHandler1.handle();
 Handler<?> handler = new Handler<Object>("test") {
 @Override
 public void handle() {
 System.out.println(content);
 }
 };
 handler.handle(); 
 } 
}
abstract class Handler<T> {
 public T content;
 public Handler(T content) {
 this.content = content; 
 }
 
 abstract void handle();
}

Вывод

Давайте скомпилируем и запустим вышеуказанную программу, это даст следующий результат –

1
2
Test

Diamond Оператор Java 9 и более поздние версии

В Java 9 мы можем использовать оператор <> с анонимным классом, как показано ниже.

Пример

В приведенном ниже примере мы создали анонимные классы для абстрактного класса Handler, принимающего общий аргумент, но без типа объекта, при создании анонимного класса, поскольку нам не нужно передавать аргумент типа. Компилятор сам определяет тип.

public class Tester {
 public static void main(String[] args) {
 // create an Anonymous class to handle 1
 // Here we do not need to pass Type arguments in diamond operator 
 // as Java 9 compiler can infer the type automatically
 Handler<Integer> intHandler = new Handler<>(1) {
 @Override
 public void handle() {
 System.out.println(content);
 }
 };
 intHandler.handle();
 Handler<? extends Number> intHandler1 = new Handler<>(2) {
 @Override
 public void handle() {
 System.out.println(content);
 }
 };
 intHandler1.handle();
 Handler<?> handler = new Handler<>("test") {
 @Override
 public void handle() {
 System.out.println(content);
 }
 };
 handler.handle(); 
 } 
}
abstract class Handler<T> {
 public T content;
 public Handler(T content) {
 this.content = content; 
 }
 
 abstract void handle();
}

Вывод

Давайте скомпилируем и запустим вышеуказанную программу, это даст следующий результат –

1
2
Test

java

  1. Java — Конструкторы
  2. Java 10 — новые API и опции
  3. Java — внутренние классы
  4. Дата и время Java:SimpleDateFormat, текущая дата и сравнение
  5. Класс файла Java
  6. Java — комментарии к документации
  7. Типы данных Java (примитивные)
  8. Оператор Java if...else
  9. Java ArrayDeque
  10. Java — дженерики