Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Java

Java Diamond Operator:vereenvoudig generieken in Java 7+

Java Diamond-operator

De diamantoperator werd geïntroduceerd in Java 7 om code leesbaarder te maken voor generieke programma's. Een generiek is een soort argument. Met behulp van generiek kunnen we elk soort object doorgeven dat door de klassenmethoden moet worden verwerkt. Als we bijvoorbeeld vóór Java 7 een lijst met tekenreeksen maken, moeten we de volgende syntaxis gebruiken om een lijst met tekenreeksen te instantiëren met een ArrayList-object.

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

Vanaf Java 7 kunnen we de diamantoperator gebruiken om de bovenstaande syntaxis als volgt te vereenvoudigen −

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

Maar het kon niet worden gebruikt met anonieme innerlijke klassen. We kunnen bijvoorbeeld het objecttype van de diamantoperator in de onderstaande syntaxis vóór Java 9 niet weglaten.

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

Diamantoperator in anonieme klasse

In Java 9 kan de diamantoperator ook worden gebruikt met een anonieme klasse om de code te vereenvoudigen en de leesbaarheid te verbeteren.

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

Diamantoperator in Java 7, Java 8

In het onderstaande voorbeeld hebben we anonieme klassen gemaakt voor een abstracte klassehandler die een generiek argument accepteert en het objecttype doorgeeft terwijl we de anonieme klasse maken, omdat we het typeargument moeten doorgeven, anders kan het programma niet compileren.

Voorbeeld

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();
}

Uitvoer

Laten we het bovenstaande programma compileren en uitvoeren, dit zal het volgende resultaat opleveren −

1
2
Test

Diamond Operator Java 9 en hoger

Met Java 9 kunnen we de operator <> gebruiken met een anonieme klasse, zoals hieronder weergegeven.

Voorbeeld

In het onderstaande voorbeeld hebben we anonieme klassen gemaakt voor een abstracte klassehandler die een generiek argument accepteert, maar zonder het objecttype, terwijl we de anonieme klasse maken, omdat we het typeargument niet hoeven door te geven. Compiler leidt het type zelf af.

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();
}

Uitvoer

Laten we het bovenstaande programma compileren en uitvoeren, dit zal het volgende resultaat opleveren −

1
2
Test

Java

  1. Java-vector
  2. Zelfstudie Java-arrays:declareren, maken, initialiseren [voorbeeld]
  3. Java FileOutputStream-klasse
  4. Java - Uitzonderingen
  5. Java enum Strings
  6. Java-schrijversklasse
  7. Java String toLowercase() en toUpperCase() methoden
  8. Java 10 - Geconsolideerd JDK-forest
  9. Java TreeSet
  10. Multithreading in Java-zelfstudie met programma en voorbeelden
  11. Hoe een array van objecten in Java te maken