sprawdzamy jakość naszego kodu przy użyciu sonaru i Sonar znaleźć kod, który porównuje obiekty tożsamości tak:Kontrola obiektów dla tożsamości i Sonar wystawia
if (cellOfInterest == currentCell) { … }
Sonar znajdzie tego rodzaju kontroli tożsamości osobliwego wystarczy nazwać to krytycznym i proponuje zastąpienie sprawdzania tożsamości (przy użyciu ==
) sprawdzeniem równości (używając zamiast tego .equals()
). Kontrole tożsamości, więc uzasadnienie tego jest często nie to, co rozumie się.
W naszym przypadku jednak mamy iterację listy Cell
s i sprawdzić w każdej iteracji (currentCell
) czy jesteśmy obsługi specjalną komórkę już mamy (cellOfInterest
).
Chciałbym usłyszeć, czy są inne wzory niż nasze, które są powszechne i które unikają tego problemu po prostu przy użyciu innego projektu. Albo jakie rozwiązania proponujesz, aby uniknąć korzystania z kontroli tożsamości we wspomnianej sytuacji?
Zastanawialiśmy się nad zastąpieniem sprawdzania tożsamości za pomocą kontroli równości, jak opisano powyżej, ale nie wydaje się mieć zastosowania w naszej sytuacji, ponieważ inne komórki mogą być "równe", ale nie identyczne.
Wszystkie pomysły są mile widziane!
Dlaczego spadamy? Prosimy o komentarz w takich przypadkach! Nie mam pojęcia, jak poprawić moje pytanie, jeśli nie powiesz mi, co cię popchnęło. – Alfe
Czy wszystkie te komórki należą do określonej klasy? –
Powiedzmy "tak", podzielmy także pytanie na dwie części, gdy powiemy, że klasa pochodzi z biblioteki innej firmy, więc nie można jej dotknąć; i kiedy mówimy, że to nasza własna klasa i można ją zmienić. – Alfe