In Java 1.8, la seguente espressione lambda conforme ad entrambe le interfacce funzionali Runnable
e Callable
:scegliendo tra i metodi di overload se il parametro attuale è un lambda
() -> {
throw new RuntimeException("FIXME");
}
Tuttavia, se presento a un utilizzando un metodo a un solo argomento e ignora il valore restituito (ovvero non sono disponibili informazioni sull'inferenza di tipo), ExecutorService#submit(Callable)
viene scelto in fase di compilazione, a meno che non esprima esplicitamente il cast di lambda a Runnable
.
Come fa il compilatore scegliere tra i metodi di overload nel caso di cui sopra, a condizione che Runnable
e Callable
non condividono alcuna gerarchia comune e più specifica tipo regola non si applica qui?
@Makoto Questo è esattamente il motivo per cui il sovraccarico ** avviene ** qui. – biziclop
@biziclop: Non sono sicuro del motivo per cui ho perso il controllo e sovraccarico per un secondo. Deve essere il tempo. – Makoto
Stranamente il mio codice di esempio sceglie il sovraccarico 'Runnable'. – biziclop