2015-03-03 13 views
7

Ho una classe che è un multitono, quindi so che data una chiave particolare, non ci saranno mai due istanze della stessa classe che esistono. Ciò significa che, invece di:Annotazione di una classe Java come sicura per il confronto di riferimento

if (someObject.equals(anotherObject)) 

... è sicuro per me fare questo:

if (someObject == anotherObject) 

La classe è anche final, quindi so che nulla relative al polimorfismo potrebbe causare problemi per paragone

IDEA mi informa doverosamente che è rischioso confrontare due istanze direttamente e che dovrei usare .equals(), ma so che non è in questo caso. C'è qualche annotazione che posso applicare alla mia classe per istruire IDEA, e potenzialmente altri editor e, soprattutto, altri utenti, che un confronto diretto di riferimento per l'uguaglianza sulle istanze della mia classe sia sicuro?

So che potrei solo dire a IDEA di sopprimere l'avviso, ma dovrei farlo per ogni confronto tra questi due tipi o globalmente, nessuna delle quali è una buona idea. Inoltre, è più importante che lascio che gli utenti della mia classe sappiano che è sicuro, più veloce e persino preferito (convincimi altrimenti) oltre il .equals().

+0

Oh, e la serializzazione o altri shenanigans non dovrebbero essere applicati qui. L'oggetto è sempre e solo costruito da me, non incidentalmente attraverso altri mezzi come la deserializzazione. Questa è un'applicazione GWT che significa anche che qualsiasi cosa relativa al multithreading non si applica. – user3466413

+6

Qui proverò a discutere di '.equals' qui: Se hai solo' .equals' si riferisce all'eguaglianza di riferimento, dovrebbe ottimizzare a '==', e gli utenti non devono ricordare che alcuni oggetti sono okay con '==' e altri no. Possono semplicemente usare '.equals' ovunque e avranno le stesse buone prestazioni di' == '. –

+0

@LouisWasserman Ma allora devi fare attenzione che i tuoi riferimenti non siano nulli. O almeno che la tua mano sinistra non lo è. – RealSkeptic

risposta

1

L'ispezione IntelliJ ha un'opzione "Ignora" == "tra oggetti di un tipo con solo costruttori privati". Se ho capito bene, l'attivazione di questa opzione disattiva l'evidenziazione nel tuo caso.

Attualmente non è possibile che in IntelliJ IDEA venga ignorato il confronto == in base a un'annotazione.

+0

Grazie per il suggerimento di configurazione IDEA. C'è un modo per aggiungere anche alcuni metadati alla classe in modo che le persone che usano Eclipse o altri editor sapranno anche che il confronto è sicuro? – user3466413

+0

Per un editor di testo generico, non è possibile aggiungere alcun metadato alla definizione della classe in modo che gli utenti della classe lo vedano.Per quanto riguarda Eclipse, non ne ho abbastanza familiarità per dirti qualcosa di specifico. – yole