Non sono sicuro di come sia possibile garantire l'uguaglianza/immutabilità dell'interfaccia funzionale. Immagino che non ci sia modo di assicurare l'uguaglianza quando uso questo zucchero sintattico in java 8, per favore fammi sapere qualsiasi suggerimento se ne hai.Uguaglianza di istanza dell'interfaccia funzionale in java
Ho creato un breve snippet di codice per la mia domanda.
public interface Element {
void doSomething(int a);
}
e ho cercato di aggiungere un'istanza di questa interfaccia in modo funzionale
public class FunctionSet {
public void doubleUp(int a) {
System.out.println(a*2);
}
public void square(int a) {
System.out.println(a*a);
}
public static void main(String[] args) {
HashSet<Element> set = new HashSet<>();
FunctionSet functionSet = new FunctionSet();
set.add(functionSet::doubleUp);
set.add(functionSet::square);
System.out.println(set.add(functionSet::doubleUp));
}
}
la stampa vera che significa che non ci fosse alcun controllo di uguaglianza e anche io non può rimuovere qualsiasi istanza da Set una volta che lo aggiungo.
nel caso in cui utilizzo l'interfaccia funzionale come argomento, esiste un modo per confrontare in qualche modo tali istanze?
apprezzeranno qualsiasi aiuto, grazie in anticipo!
Mutabilità è determinata dallo stato. Quando un oggetto non ha uno stato (cioè, quando non ha campi di istanza), non può essere mutabile. Gli oggetti apolidi, come la maggior parte (tutti?) Lambda sono quindi sempre immutabili. Gli oggetti immutabili possono e devono essere singoletti poiché il loro stato non può mai cambiare, ma è possibile avere due oggetti immutabili altrimenti identici a indirizzi di memoria diversi ... che darebbero due oggetti equivalenti con un'identità separata. – scottb
Risposta breve: No, non è possibile testare due lambda da percorsi di codice diversi per l'uguaglianza. –
@Louis Wasserman: la posizione del codice non ha importanza, la risposta corretta è che non è possibile testare due lambda per l'uguaglianza, anche se istanziati nello stesso percorso di codice. Mentre potrebbe sembrare che funzioni in alcuni casi, questo è un comportamento dipendente dall'implementazione. – Holger