In Java, il codice seguente restituisce false in entrambe le query. Perché? Non sarebbe più semplice per i riferimenti al metodo essere singleton? Certamente renderebbe molto più semplice attaccare e staccare gli ascoltatori. Poiché è necessario mantenere una costante per qualsiasi riferimento al metodo che dovrà essere verificato in equivalenza, non è possibile utilizzare l'operatore di riferimento del metodo in ogni posizione necessaria.Perché i riferimenti al metodo non sono singleton?
public class Main {
public Main() {
// TODO Auto-generated constructor stub
}
public void doStuff() {
}
public static void main(String[] args) {
Main main = new Main();
Runnable thing1 = main::doStuff;
Runnable thing2 = main::doStuff;
System.out.println(thing1 == thing2); // false
System.out.println(thing1.equals(thing2)); // false
}
}
Quindi, perché non eseguire l'override di .equals() per i metodi di riferimento? Tutto ciò che sarebbe richiesto sarebbe ognuno con un riferimento a 'main' e' Main.class.getMethod ("doStuff") '(Grazie per il suggerimento @CostiCiudatu) – Dimitriye98
@ Dimitriye98: Questa è sicuramente una possibilità - ma tu dovresti è necessario definire con precisione la semantica. Ad esempio, i riferimenti a metodi di istanza su due oggetti distinti ma uguali sono uguali? Forse ... ma ogni volta che ti sei affidato a 'equals' come questo ti baseresti su un dettaglio di implementazione della funzione - cosa succederebbe se qualcuno implementasse' Runnable' manualmente invece? –
Sembrerebbe che il mio edit sia stato ninja perché ho premuto per sbaglio invio invece di shift-enter e ho inviato il commento in anticipo: P – Dimitriye98