Main concepts
Practical example: SomeTest generic functional interface
The SomeTest generic interface can be used to implement lambdas with different types (e.g. Integer, Double, String).
Code
// Interface funcional genérica com dois parâmetros que retorna um boolean interface SomeTest<T> { boolean test(T n, T m); } public class GenericFunctionalInterfaceDemo { public static void main(String[] args) { // Expressão lambda para verificar se um inteiro é fator de outro SomeTest<Integer> isFactor = (n, d) -> (n % d) == 0; if (isFactor.test(10, 2)) { System.out.println("2 is a factor of 10"); } // Expressão lambda para verificar se um Double é fator de outro SomeTest<Double> isFactorD = (n, d) -> (n % d) == 0; if (isFactorD.test(212.0, 4.0)) { System.out.println("4.0 is a factor of 212.0"); } // Expressão lambda para verificar se uma string faz parte de outra SomeTest<String> isIn = (a, b) -> a.indexOf(b) != -1; String str = "Generic Functional Interface"; System.out.println("Testing string: " + str); if (isIn.test(str, "face")) { System.out.println("'face' is found."); } else { System.out.println("'face' not found."); } } }
Exit
2 is a factor of 10 4.0 is a factor of 212.0 Testing string: Generic Functional Interface 'face' is found.
Explanation of the example
Generic interface definition:
interface SomeTest<T> { boolean test(T n, T m); }
T is the generic type that will be replaced by specific types (Integer, Double, String, etc.).
Use of lambda expressions:
Reuse of the same interface:
The SomeTest interface is used with different data types (Integer, Double, String), demonstrating the flexibility of generics.
Benefits of Generic Functional Interfaces
Suggested exercise
Redesign the previously mentioned NumericFunc functional interface as a generic interface. Use it to perform operations such as calculating the square of a number or checking whether a number is even.
Full Example: Refactoring NumericFunc as Generic
// Interface funcional genérica com um parâmetro e um retorno interface NumericFunc<T> { T apply(T n); } public class GenericNumericFuncDemo { public static void main(String[] args) { // Lambda para calcular o quadrado de um número inteiro NumericFunc<Integer> square = (n) -> n * n; System.out.println("Quadrado de 5: " + square.apply(5)); // Saída: 25 // Lambda para calcular o quadrado de um número Double NumericFunc<Double> squareDouble = (n) -> n * n; System.out.println("Quadrado de 3.14: " + squareDouble.apply(3.14)); // Saída: 9.8596 // Lambda para verificar se um número é par (retorna "Par" ou "Ímpar") NumericFunc<Integer> isEven = (n) -> (n % 2 == 0) ? n : -1; System.out.println("Resultado Numero pares de : Resultado com multiplos valores " + isEven.apply(15)) ; } }
Output:
Quadrado de 5: 25 Quadrado de 3.14: 9.8596 Resultado Número pares de : Resultado com múltiplos valores -1
The above is the detailed content of Generic Functional Interfaces. For more information, please follow other related articles on the PHP Chinese website!