1. Introduction to the Diamond Operator
2. Declaration Example Before JDK 7
// Classe genérica com dois tipos class TwoGen<T, V> { T ob1; V ob2; TwoGen(T o1, V o2) { ob1 = o1; ob2 = o2; } } // Criação de uma instância antes do JDK 7 TwoGen<Integer, String> tgOb = new TwoGen<Integer, String>(42, "testing");
Disadvantage: Generic types need to be repeated both in declaration and instance creation.
. Using the Rhombus Operator in JDK 7
// Criação de uma instância usando o operador losango TwoGen<Integer, String> tgOb = new TwoGen<>(42, "testing");
The operator <> asks the compiler to infer the type arguments based on the variable declaration (TwoGen).
4. General Form
General syntax for creating an instance of a generic class:
nome-classe<lista-arg-tipo> nome-var = new nome-classe<>(lista-arg-cons);
Example:
TwoGen<Double, Boolean> example = new TwoGen<>(3.14, true);
5. Inference in Methods
Type inference also works for methods that take generic classes as a parameter.
Example:
// Adicionado à classe TwoGen boolean isSame(TwoGen<T, V> o) { return ob1 == o.ob1 && ob2 == o.ob2; } // Chamando o método usando o operador losango if (tgOb.isSame(new TwoGen<>(42, "testing"))) { System.out.println("Same"); }
The types of the new TwoGen<>(...) parameter are automatically inferred.
6. Benefits of the Losango Operator
Reducing verbosity: Especially useful for generic classes with many type parameters.
Readability: Simplifies complex statements.
7. Compatibility
The diamond operator does not work in Java versions prior to JDK 7.
Examples in old books and codes use the full syntax to maintain compatibility with all Java compilers that support generics.
8. Good Practices
Use the diamond operator in projects with JDK 7 support to optimize and make code more readable.
Prefer the full syntax in learning examples or legacy projects for clarity.
The above is the detailed content of Type Inference with the Diamond Operator. For more information, please follow other related articles on the PHP Chinese website!