Ich habe eine Klasse, die ein Multiton ist, also weiß ich, dass bei einem bestimmten Schlüssel niemals zwei Instanzen der gleichen Klasse existieren werden. Dies bedeutet, dass statt:Annotieren einer Java-Klasse als sicher für Referenzvergleich
if (someObject.equals(anotherObject))
... es ist sicher für mich, dies zu tun:
if (someObject == anotherObject)
Die Klasse ist auch final
, so dass ich weiß, dass nichts zu Polymorphismus im Zusammenhang zu Problemen führen könnte Vergleich entweder.
IDEA pflichtgemäß informiert mich, dass es riskant ist, zwei Instanzen direkt zu vergleichen, und dass ich .equals()
verwenden sollte, aber ich weiß, dass es nicht in diesem Fall ist. Gibt es eine Anmerkung, die ich auf meine Klasse anwenden kann, um IDEA und möglicherweise andere Redakteure und noch wichtiger andere Benutzer anzuweisen, dass ein direkter Referenzvergleich für die Gleichheit in Instanzen meiner Klasse sicher ist?
Ich weiß, ich könnte IDEA einfach sagen, die Warnung zu unterdrücken, aber ich würde es für jeden Vergleich zwischen diesen beiden Typen oder global tun müssen, von denen keine eine gute Idee ist. Außerdem ist es wichtiger, dass die Benutzer meiner Klasse wissen, dass es sicher, schneller und sogar bevorzugt ist (überzeuge mich von anderen) über .equals()
.
Oh, und Serialisierung oder andere Spielereien sollten hier nicht gelten. Das Objekt wird immer nur von mir konstruiert, nicht zufällig durch andere Mittel wie die Deserialisierung. Dies ist eine GWT-Anwendung, was bedeutet, dass auch alles, was mit Multithreading zu tun hat, nicht zutrifft. – user3466413
Ich werde versuchen, für '.equals' hier zu argumentieren: Wenn Sie nur' .equals' beziehen sich auf Referenzgleichheit, sollte es zu '==' optimieren, und Benutzer müssen nicht daran denken, dass einige Objekte sind okay mit '==' und manche nicht. Sie können einfach '.equals' überall verwenden und es wird genauso gute Leistung haben wie' == '. –
@LouisWasserman Aber dann müssen Sie darauf achten, dass Ihre Referenzen nicht null sind. Oder zumindest, dass deine linke nicht ist. – RealSkeptic