2015-03-03 12 views
7

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().

+0

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

+6

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' == '. –

+0

@LouisWasserman Aber dann müssen Sie darauf achten, dass Ihre Referenzen nicht null sind. Oder zumindest, dass deine linke nicht ist. – RealSkeptic

Antwort

1

Die IntelliJ-Prüfung hat eine Option "Ignore '==' zwischen Objekten eines Typs mit nur privaten Konstruktoren". Wenn ich das richtig verstanden habe, wird durch das Aktivieren dieser Option die Hervorhebung in Ihrem Fall deaktiviert.

Es gibt derzeit keine Möglichkeit in IntelliJ IDEA, den == Vergleich basierend auf einer Anmerkung zu ignorieren.

+0

Danke für den IDEA Konfigurationsvorschlag. Gibt es eine Möglichkeit, der Klasse auch einige Metadaten hinzuzufügen, sodass Personen, die Eclipse oder andere Editoren verwenden, auch wissen, dass der Vergleich sicher ist? – user3466413

+0

Für einen allgemeinen Texteditor gibt es keine Möglichkeit, der Klassendefinition Metadaten hinzuzufügen, damit die Benutzer der Klasse sie sehen können.Was Eclipse betrifft, bin ich nicht ausreichend damit vertraut, um Ihnen etwas Spezifisches zu sagen. – yole