আমি জাভা এসই 6 এবং জাভা এসই 7 এর মধ্যে অটো আনবক্সিং আচরণের মধ্যে একটি পার্থক্য উল্লেখ করেছি। আমি কেন ভাবছি তা ভাবছি কারণ আমি এই দুটি সংস্করণের মধ্যে এই আচরণে পরিবর্তনগুলির কোনও ডকুমেন্টেশন পাচ্ছি না।
এখানে একটি সাধারণ উদাহরণ:
Object[] objs = new Object[2];
objs[0] = new Integer(5);
int myInt = (int)objs[0];
এটি জাভা এসই from থেকে জাভ্যাকের সাথে জরিমানা সংকলন করে তবে আমি যদি সংকলকটিকে "-স্রোত 1.6" যুক্তিটি দিয়ে থাকি তবে আমি শেষ লাইনে একটি ত্রুটি পেয়েছি:
inconvertible types
found : java.lang.Object
required: int
আমি জাভা এসই 6 ডাউনলোড করার চেষ্টা করেছি স্থানীয় সংস্করণ 6 সংকলক (কোনও-উত্স বিকল্প ছাড়াই) দিয়ে সংকলন করতে। এটি সম্মত হয় এবং উপরের মতো একই ত্রুটি দেয়।
তাহলে কি দেয়? আরও কিছু পরীক্ষা-নিরীক্ষা থেকে মনে হয় জাভা 6-এ আনবক্সিং কেবলমাত্র আনবক্স মানগুলিকেই সাফ করতে পারে (স্পষ্ট সংকলন সময়ে) বাক্সযুক্ত ধরণের। উদাহরণস্বরূপ, এটি উভয় সংস্করণে কাজ করে:
Integer[] objs = new Integer[2];
objs[0] = new Integer(5);
int myInt = (int)objs[0];
সুতরাং মনে হচ্ছে জাভা and থেকে 7 এর মধ্যে আনবক্সিং বৈশিষ্ট্যটি উন্নত করা হয়েছিল যাতে এটি কাস্ট করতে পারে এবং আনবক্সের অবজেক্টের ধরণগুলিকে এক ঝাঁকুনিতে ফেলে রাখতে পারে, না জেনে (কম্পাইল সময়ে) মানটি সঠিক বক্সড টাইপের। তবে জাভা Spec-এর সময়ে লেখা জাভা ল্যাঙ্গুয়েজ স্পেসিফিকেশন বা ব্লগ পোস্টিংগুলি পড়ার পরে আমি এই জিনিসের কোনও পরিবর্তন দেখতে পাচ্ছি না, তাই আমি ভাবছি যে পরিবর্তনটি কী এবং এই "বৈশিষ্ট্যটি" কী বলা হয় ?
কেবল একটি কৌতূহল: পরিবর্তনের কারণে "ভুল" আনবক্সিংগুলি ট্রিগার করা সম্ভব:
Object[] objs = new Float[2];
objs[0] = new Float(5);
int myInt = (int)objs[0];
এটি সূক্ষ্ম সংকলন করে তবে রানটাইমটিতে একটি ক্লাসকাস্টএক্সসেপশন দেয়।
এ সম্পর্কে কোন রেফারেন্স?
Integer obj = new Integer(2); int x = (int)obj;
: জাভা 7 কাজ, 6. জাভা তে থাকা ত্রুটির দেয়