Conversões entre interfaces funcionais

1 Não existe conversão automática entre interfaces funcionais equivalentes Mesmo que duas interfaces sejam "equivalentes" (ex.: Supplier e PrivilegedAction), o compilador não faz a conversão automaticamente. 2 Exemplo de método que recebe um Supplier private void execute(Supplier supplier) { System.out.println(supplier.get()); } Uso correto com Supplier: Supplier supplier = () -> "executando um supplier"; execute(supplier); 3 Tentativa incorreta usando PrivilegedAction Erro: o compilador não permite passar PrivilegedAction diretamente. PrivilegedAction action = () -> "executando uma ação"; execute(action); // Não compila Motivo: O método execute(Supplier) não aceita diretamente um PrivilegedAction. 4 Como converter usando Method Reference Usamos uma referência de método (action::run) para indicar a adaptação explicitamente. PrivilegedAction action = () -> "executando uma ação"; execute(action::run); Exemplo: ExemploInferenciaTipos.java

Apr 29, 2025 - 23:10
 0
Conversões entre interfaces funcionais

1 Não existe conversão automática entre interfaces funcionais equivalentes
Mesmo que duas interfaces sejam "equivalentes" (ex.: Supplier e PrivilegedAction), o compilador não faz a conversão automaticamente.

2 Exemplo de método que recebe um Supplier
private void execute(Supplier supplier) {
System.out.println(supplier.get());
}

Uso correto com Supplier:

Supplier supplier = () -> "executando um supplier";
execute(supplier);

3 Tentativa incorreta usando PrivilegedAction
Erro: o compilador não permite passar PrivilegedAction diretamente.

PrivilegedAction action = () -> "executando uma ação";
execute(action); // Não compila

Motivo: O método execute(Supplier) não aceita diretamente um PrivilegedAction.

4 Como converter usando Method Reference
Usamos uma referência de método (action::run) para indicar a adaptação explicitamente.

PrivilegedAction action = () -> "executando uma ação";
execute(action::run);

Exemplo: ExemploInferenciaTipos.java