equals()
Bugün yöntem ile ilginç (ve çok sinir bozucu) bir sorunla karşılaştım .
Tam olarak söylemek gerekirse, bir IDE veya hata ayıklayıcı kullanmıyordum - sadece eski moda metin editörü ve System.out'ları. Zaman çok sınırlıydı ve bir okul projesiydi.
Her neyse -
Bir içeren temel bir alışveriş sepeti geliştirmek ArrayList
ait Book
nesneler . Sepetin , ve yöntemlerini uygulamak için addBook()
, içinde zaten var olup olmadığını kontrol etmek istedim . Öyleyse gidiyorum -removeBook()
hasBook()
Book
Cart
public boolean equals(Book b) {
... // More code here - null checks
if (b.getID() == this.getID()) return true;
else return false;
}
Tüm testlerde iyi çalışıyor. 6 nesne oluşturup veri ile dolduruyorum. Üzerinde birçok ekleme, kaldırma, () işlemi yapar Cart
ve her şey yolunda gider. Sana ki okumak ya sahip equals(TYPE var)
yaequals(Object o) { (CAST) var }
ancak çalışmasını edilmiş olduğu için, çok fazla önemli değildi farz.
Sonra bir sorunla karşılaştık - Bir oluşturmak için gerekli Book
olan nesneyi sadeceID
defteri sınıf içinde onun içinde. Başka veri girilmez. Temel olarak aşağıdakiler:
public boolean hasBook(int i) {
Book b = new Book(i);
return hasBook(b);
}
public boolean hasBook(Book b) {
// .. more code here
return this.books.contains(b);
}
Birdenbire, equals(Book b)
yöntem artık çalışmıyor. Bu çok iyi bir hata ayıklayıcı olmadan izlemek için çok uzun zaman aldı ve Cart
sınıf düzgün test ve doğru varsayalım. Swaapping sonra equals()
aşağıdaki yöntemi:
public boolean equals(Object o) {
Book b = (Book) o;
... // The rest goes here
}
Her şey tekrar çalışmaya başladı. Yöntem açıkça defteri parametre olsa almaya karar bir nedeni var mı idi bir Book
nesne? Tek fark, aynı sınıftan başlatılmış ve sadece bir veri üyesiyle doldurulmuş gibi görünüyordu. Çok kafam karıştı. Lütfen, biraz ışık tuttun mu?