জাভা বেনাম শ্রেণীর জাভাস্ক্রিপ্ট বন্ধের সাথে খুব মিল, তবে জাভা বিভিন্নভাবে এটি প্রয়োগ করে। (অ্যান্ডারসনের উত্তর পরীক্ষা করুন)
সুতরাং জাভাস্ক্রিপ্ট ব্যাকগ্রাউন্ড থেকে আগত ব্যক্তিদের জন্য ঘটতে পারে এমন অদ্ভুত আচরণের সাথে জাভা বিকাশকারীকে বিভ্রান্ত না করার জন্য। আমার ধারণা, এ কারণেই তারা আমাদের ব্যবহার করতে বাধ্য করে final
, এটি জেভিএম সীমাবদ্ধতা নয়।
নীচে জাভাস্ক্রিপ্ট উদাহরণটি দেখুন:
var add = (function () {
var counter = 0;
var func = function () {
console.log("counter now = " + counter);
counter += 1;
};
counter = 100; // line 1, this one need to be final in Java
return func;
})();
add(); // this will print out 100 in Javascript but 0 in Java
জাভাস্ক্রিপ্টে, counter
মানটি 100 হবে, কারণ counter
প্রথম থেকে শেষ পর্যন্ত কেবলমাত্র একটি পরিবর্তনশীল।
তবে জাভাতে, যদি এটি না থাকে তবে final
এটি মুদ্রণ করবে 0
, কারণ অভ্যন্তরীণ বস্তুটি তৈরি হওয়ার সময়, 0
মানটি অভ্যন্তরীণ শ্রেণীর অবজেক্টের লুকানো বৈশিষ্ট্যে অনুলিপি করা হয়। (এখানে দুটি পূর্ণসংখ্যার ভেরিয়েবল রয়েছে, একটি স্থানীয় পদ্ধতিতে, অন্যটি অভ্যন্তর শ্রেণীর গোপনীয় বৈশিষ্ট্যে)
সুতরাং অভ্যন্তরীণ বস্তু তৈরির পরে কোনও পরিবর্তন (যেমন লাইন 1), এটি অভ্যন্তরীণ বস্তুকে প্রভাবিত করবে না। সুতরাং এটি দুটি পৃথক ফলাফল এবং আচরণের (জাভা এবং জাভাস্ক্রিপ্টের মধ্যে) মধ্যে বিভ্রান্তি তৈরি করবে।
আমি বিশ্বাস করি সে কারণেই, জাভা এটিকে চূড়ান্ত হতে বাধ্য করার সিদ্ধান্ত নিয়েছে, তাই ডেটা শুরু থেকে শেষ পর্যন্ত 'সামঞ্জস্যপূর্ণ'।