Penso che questa domanda sia già da qualche parte, ma non sono stata in grado di trovarla.Perché ho bisogno di un'interfaccia funzionale per funzionare con lambdas?
Non capisco, perché è necessario avere un'interfaccia funzionale per lavorare con lambda. Si consideri il seguente esempio:
public class Test {
public static void main(String...args) {
TestInterface i =() -> System.out.println("Hans");
// i = (String a) -> System.out.println(a);
i.hans();
// i.hans("Hello");
}
}
public interface TestInterface {
public void hans();
// public void hans(String a);
}
Questo funziona senza problemi, ma se si rimuove il commento le righe di commento, non è così. Perché? A mio avviso, il compilatore dovrebbe essere in grado di distinguere entrambi i metodi, poiché hanno parametri di input diversi. Perché ho bisogno di un'interfaccia funzionale e faccio esplodere il mio codice?
MODIFICA: i duplicati collegati non hanno risposto alla mia domanda perché sto chiedendo di parametri di metodo diversi. Ma ho avuto alcune risposte davvero utili qui, grazie a tutti quelli che mi hanno aiutato! :)
EDIT2: Scusate, sono, ovviamente, non un madrelingua, ma per me stesso preciso:
public interface TestInterface {
public void hans(); //has no input parameters</br>
public void hans(String a); //has 1 input parameter, type String</br>
public void hans(String a, int b); //has 2 input parameters, 1. type = String, 2. type = int</br>
public void hans(int a, int b); //has also 2 input parameters, but not the same and a different order than `hans(String a, int a);`, so you could distinguish both
}
public class Test {
public static void main(String...args) {
TestInterface i =() -> System.out.println("Hans");
i = (String a) -> System.out.println(a);
i = (String a, int b) -> System.out.println(a + b);
i = (int a, int b) -> System.out.println(a);
i.hans(2, 3); //Which method would be called? Of course the one that would take 2 integer arguments. :)
}
}
Tutto quello che chiedo è di circa gli argomenti. Il nome del metodo non ha importanza, ma ogni metodo richiede un ordine univoco di argomenti diversi e, a causa di ciò, Oracle potrebbe aver implementato questa funzione, invece, semplicemente rendendo possibile un singolo metodo per "Lambda-Interface".
'int i = 7; i = 5; System.out.println (i); // non sarebbe fantastico se questo stampasse sia il 7 che il 5? ' – immibis
Davvero non capisco il tuo ragionamento. Se qualcosa non implementa un'interfaccia, allora come può essere di quel tipo? Un iPod non conta come iPhone solo perché non ti capita di fare telefonate. – zeroflagL
@immibis: Ciò che descrivi qui è diverso da quello che ho chiesto. :) – codepleb