ঠিক আছে, সবার আগে, আপনি নতুন HashMap
তৈরির কল দিয়ে স্মৃতি নষ্ট করছেন । আপনার দ্বিতীয় লাইনটি এই তৈরি করা হ্যাশম্যাপটির রেফারেন্সটিকে পুরোপুরি উপেক্ষা করে এটি আবর্জনা সংগ্রহকারীকে উপলভ্য করে। সুতরাং, এটি করবেন না, ব্যবহার করুন:
private Map<String, String> someMap = (HashMap<String, String>)getApplicationContext().getBean("someMap");
দ্বিতীয়ত, সংকলকটি অভিযোগ করছে যে আপনি বস্তুটি HashMap
এটি কিনা তা যাচাই না করেই একটিটিতে ফেলে দেন HashMap
। তবে, আপনি করতে থাকলেও:
if(getApplicationContext().getBean("someMap") instanceof HashMap) {
private Map<String, String> someMap = (HashMap<String, String>)getApplicationContext().getBean("someMap");
}
আপনি সম্ভবত এখনও এই সতর্কতা পেতে হবে। সমস্যাটি রয়েছে, getBean
ফিরে আসে Object
, সুতরাং এটি কী তা কী তা অজানা। এটিকে HashMap
সরাসরি রূপান্তরকরণের ফলে দ্বিতীয় কেসটি সমস্যা তৈরি করবে না (এবং সম্ভবত প্রথম ক্ষেত্রে কোনও সতর্কতা উপস্থিত হবে না, আমি নিশ্চিত নই যে জাভা সংকলক জাভা 5 এর সতর্কতার সাথে কতটা প্যাডেন্টিক)। তবে আপনি এটিকে রূপান্তর করছেন HashMap<String, String>
।
হ্যাশম্যাপস হ'ল মানচিত্র যা কোনও বিষয়টিকে কী হিসাবে গ্রহণ করে এবং মান হিসাবে একটি বস্তু HashMap<Object, Object>
থাকে , যদি আপনি চান। সুতরাং, এর কোনও গ্যারান্টি নেই যে আপনি যখন আপনার শিমটি পান এটি এটি হিসাবে উপস্থাপিত HashMap<String, String>
হতে পারে HashMap<Date, Calendar>
কারণ যে নন-জেনেরিক উপস্থাপনা ফিরে আসে তাতে কোনও বস্তু থাকতে পারে।
যদি কোডটি সংকলন করে এবং আপনি String value = map.get("thisString");
কোনও ত্রুটি ছাড়াই কার্যকর করতে পারেন তবে এই সতর্কতাটি সম্পর্কে চিন্তা করবেন না। তবে মানচিত্রটি স্ট্রিংয়ের মানগুলির সাথে স্ট্রিং কীগুলি সম্পূর্ণরূপে না থাকলে আপনি ClassCastException
রানটাইম এ পেয়ে যাবেন , কারণ জেনারিকরা এ ক্ষেত্রে ঘটতে বাধা দিতে পারে না।