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<String> supplier) {
System.out.println(supplier.get());
}
Uso correto com Supplier:
Supplier<String> supplier = () -> "executando um supplier";
execute(supplier);
3 Tentativa incorreta usando PrivilegedAction
Erro: o compilador não permite passar PrivilegedAction diretamente.
PrivilegedAction<String> 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<String> action = () -> "executando uma ação";
execute(action::run);
Exemplo: ExemploInferenciaTipos.java
Top comments (0)