আমি equals()
আজ সেই পদ্ধতিটি নিয়ে একটি আকর্ষণীয় (এবং খুব হতাশাব্যঞ্জক) ইস্যুতে ছড়িয়ে পড়েছি যার কারণে আমি যা মনে করি যা ভাল পরীক্ষিত শ্রেণি হিসাবে ক্র্যাশ হয়ে পড়েছিল এবং একটি ত্রুটি সৃষ্টি করেছিল যা আমাকে ট্র্যাক করতে খুব দীর্ঘ সময় নিয়েছিল।
কেবল সম্পূর্ণতার জন্য, আমি কোনও আইডিই বা ডিবাগার ব্যবহার করছিলাম না - কেবলমাত্র ভাল পুরানো ফ্যাশন সম্পাদক এবং সিস্টেম.আউট's সময় খুব সীমিত ছিল এবং এটি একটি স্কুল প্রকল্প ছিল।
যাইহোক -
আমি একটি মৌলিক শপিং কার্ট যা থাকতে পারে উন্নয়নশীল ছিল ArrayList
এর Book
বস্তু । কার্টের ,, এবং পদ্ধতিগুলি বাস্তবায়নের জন্য addBook()
, আমি আগে থেকেই এর মধ্যে বিদ্যমান কিনা তা খতিয়ে দেখতে চেয়েছিলাম । তাই আমি যাই -removeBook()
hasBook()
Book
Cart
public boolean equals(Book b) {
... // More code here - null checks
if (b.getID() == this.getID()) return true;
else return false;
}
সমস্ত পরীক্ষায় সূক্ষ্ম কাজ করে। আমি 6 টি অবজেক্ট তৈরি করি এবং সেগুলিতে ডেটা পূরণ করি। অনেকগুলি যুক্ত করে, মুছে ফেলে, () অপারেশন করে Cart
এবং সবকিছু ঠিকঠাক কাজ করে। আমি পড়েছি আপনি হয় equals(TYPE var)
বা থাকতেequals(Object o) { (CAST) var }
পারেন তবে ধরে নিয়েছিলেন যেহেতু এটি কাজ করছে তাই এটি খুব বেশি গুরুত্ব দেয় না।
তারপর আমি একটি সমস্যাতে পড়েছি - আমি একটি তৈরি করতে প্রয়োজন Book
সঙ্গে বস্তুর শুধুমাত্রID
বইয়ের বর্গ মধ্যে থেকে এটা হবে। এটিতে অন্য কোনও ডেটা প্রবেশ করা হবে না। মূলত নিম্নলিখিত:
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);
}
হঠাৎ করেই, equals(Book b)
পদ্ধতিটি আর কাজ করে না। কোনও ভাল ডিবাগার ছাড়াই এবং Cart
ক্লাসটি সঠিকভাবে পরীক্ষিত এবং সঠিক হয়েছে তা ধরে নিলে এটি বেশ দীর্ঘ সময় নিয়েছে । equals()
নিম্নলিখিতটিতে পদ্ধতিটি অদলবদলের পরে :
public boolean equals(Object o) {
Book b = (Book) o;
... // The rest goes here
}
সবকিছু আবার কাজ শুরু। পদ্ধতিটি বুকের প্যারামিটারটি গ্রহণ না করার সিদ্ধান্ত নেওয়ার কোনও কারণ আছে কি না এটি স্পষ্টভাবে একটি বস্তু ছিলBook
? পার্থক্যটি কেবল একই শ্রেণীর মধ্যে থেকেই ইনস্ট্যান্ট করা হয়েছিল বলে মনে হয়েছিল এবং কেবলমাত্র একজন ডেটা সদস্য দ্বারা পূর্ণ। আমি খুব বিভ্রান্ত প্লিজ, কিছুটা আলোকপাত করবেন?