সাধারণভাবে প্রতিবিম্বের ডাউনসাইডস
সরলরেখার কোডের চেয়ে প্রতিবিম্ব বোঝা শক্ত।
আমার অভিজ্ঞতায় প্রতিবিম্বটি জাভাতে একটি "বিশেষজ্ঞ-স্তর" বৈশিষ্ট্য। আমি যুক্তি দিয়ে বলব যে বেশিরভাগ প্রোগ্রামাররা সক্রিয়ভাবে প্রতিচ্ছবি কখনই ব্যবহার করে না (যেমন গ্রন্থাগারগুলি প্রতিফলন ব্যবহার করে তা গণনা করে না)। এই কোডারগুলিকে এই প্রোগ্রামারগুলির জন্য বুঝতে আরও কঠিন ব্যবহার করে।
প্রতিবিম্ব কোডটি স্থির বিশ্লেষণে অ্যাক্সেসযোগ্য
ধরুন getFoo
আমার ক্লাসে আমার প্রাপ্তি আছে এবং আমি এর নাম পরিবর্তন করতে চাই getBar
। যদি আমি কোনও প্রতিবিম্ব ব্যবহার না করে, আমি কেবল কোড বেসটি অনুসন্ধান করতে পারি getFoo
এবং গেটর ব্যবহার করে এমন প্রতিটি জায়গা খুঁজে পাব যাতে আমি এটি আপডেট করতে পারি এবং আমি যদি একটি মিসও করি তবে সংকলকটি অভিযোগ করবে।
তবে যদি গেটর ব্যবহার করে এমন জায়গাটি যদি এর মতো callGetter("Foo")
এবং কিছু callGetter
হয় getClass().getMethod("get"+name).invoke(this)
তবে উপরের পদ্ধতিটি এটি খুঁজে পাবে না এবং সংকলকটি অভিযোগ করবে না। কোডটি আসলে কার্যকর হলেই আপনি একটি পাবেন NoSuchMethodException
। এবং সেই ব্যতিক্রমটি (যা ট্র্যাক করা হয়) গিলে ফেললে আপনি যে ব্যথার মধ্যে রয়েছেন তা কল্পনা করুন callGetter
কারণ "এটি কেবল হার্ড-কোডিং স্ট্রিংগুলির সাথে ব্যবহৃত হয়, এটি আসলে ঘটতে পারে না"। (কেউ তা করবে না, কেউ তর্ক করতে পারে? বাদে ওপি তার এসও উত্তরে ঠিক এমনটি করেছিল the যদি ক্ষেত্রটির নাম পরিবর্তন করা হয় তবে জেনেরিক সেটারের ব্যবহারকারীরা সেটার চূড়ান্ত অস্পষ্ট ত্রুটিবিহীন চুপচাপ কিছুই বাদ দিয়ে কিছুই খেয়াল করতে পারে না। প্রাপ্ত ব্যবহারকারীরা যদি ভাগ্যবান হন তবে অবহেলিত ব্যতিক্রমের কনসোল আউটপুটটি লক্ষ্য করুন))
প্রতিবিম্ব কোডটি সংকলক দ্বারা টাইপ-চেক করা হয় না
এটি মূলত উপরের একটি বৃহত উপ-পয়েন্ট। প্রতিবিম্ব কোড সম্পর্কে Object
। প্রকারগুলি রানটাইমের সময় পরীক্ষা করা হয়। ত্রুটিগুলি ইউনিট পরীক্ষাগুলি দ্বারা আবিষ্কার করা হয় তবে কেবল আপনার কভারেজ থাকলে। ("এটি কেবল প্রাপ্তি, আমার এটি পরীক্ষা করার দরকার নেই।") মূলত, আপনি পাইথনের ওপরে জাভা ব্যবহার করে সুবিধাটি হারাতে পারেন place
অপ্টিমাইজেশনের জন্য প্রতিবিম্ব কোড অনুপলব্ধ
সম্ভবত তাত্ত্বিকভাবে নয়, তবে অনুশীলনে আপনি এমন কোনও জেভিএম পাবেন না যা এর জন্য একটি ইনলাইন ক্যাশে ইনলাইন করে বা তৈরি করে Method.invoke
। এই জাতীয়করণের জন্য সাধারণ পদ্ধতি কলগুলি উপলভ্য। এটি তাদের অনেক দ্রুত করে তোলে।
প্রতিবিম্ব কোডটি সাধারণভাবে স্লো
প্রতিবিম্ব কোডের জন্য গতিশীল পদ্ধতি অনুসন্ধান এবং প্রকারের পরীক্ষা করা স্বাভাবিক পদ্ধতি কলগুলির চেয়ে ধীর। যদি আপনি সেই সস্তা এক-লাইনের গিটারটিকে একটি প্রতিবিম্ব জানোয়ারে পরিণত করেন, আপনি সম্ভবত (আমি এটি পরিমাপ করিনি) স্লোনের বিস্তারের কয়েকটি অর্ডার খুঁজছেন।
জেনেরিক গেটর / সেটারের বিশেষত ক্ষতি
এটি কেবল একটি খারাপ ধারণা, কারণ আপনার ক্লাসের এখন আর কোনও এনক্যাপসুলেশন নেই। এটির প্রতিটি ক্ষেত্র অ্যাক্সেসযোগ্য। আপনি তাদের পাশাপাশি সর্বজনীন করতে পারেন।