সাম্প্রতিককালে আমি একটি সাক্ষাত্কারে এমন প্রশ্ন হিসাবে জিজ্ঞাসা করা প্রশ্নটি প্রকাশ পেয়েছিল যা প্রার্থী জাভা ভাষায় যুক্ত হওয়া চাইবে। এটিকে সাধারণত একটি ব্যথা হিসাবে চিহ্নিত করা হয় যা জাভা জেনারিকসকে সংস্কার করে না তবে যখন ধাক্কা দেওয়া হয়, তখন প্রার্থী আসলে আমাকে বলতে পারেন না যে তিনি সেখানে কী কী জিনিস অর্জন করতে পারতেন they
স্পষ্টতই যেহেতু কাঁচা ধরণের জাভাতে (এবং অনিরাপদ চেকগুলি) অনুমোদিত, তাই জেনেরিকসকে বিকৃত করা এবং এটির List<Integer>
(উদাহরণস্বরূপ) আসলে রয়েছে এমনটি দিয়ে শেষ করা সম্ভব String
। এগুলি স্পষ্টতই অসম্ভব হিসাবে বর্ণনা করা যেতে পারে টাইপ তথ্যগুলিকে পুনরায় সংশোধন করা; তবে এর চেয়ে আরও বেশি কিছু থাকতে হবে !
লোকেরা কী সত্যিই তারা করতে চাইবে এমন উদাহরণগুলি পোস্ট করতে পারত , কী জেনেরিকগুলি উপলব্ধ ছিল? আমি বোঝাতে চাইছি স্পষ্টতই আপনি List
রানটাইমের সময় একটি ধরণের পেতে পারেন - তবে আপনি এটি দিয়ে কী করবেন?
public <T> void foo(List<T> l) {
if (l.getGenericType() == Integer.class) {
//yeah baby! err, what now?
সম্পাদনা : উত্তরগুলির উত্তর হিসাবে এটির একটি দ্রুত আপডেট প্রধানত Class
প্যারামিটার হিসাবে পাস করার প্রয়োজন সম্পর্কে উদ্বিগ্ন বলে মনে হয় (উদাহরণস্বরূপ EnumSet.noneOf(TimeUnit.class)
)। আমি যেখানে কেবল এটি সম্ভব নয় তার লাইন ধরে আরও কিছু সন্ধান করছিলাম । উদাহরণ স্বরূপ:
List<?> l1 = api.gimmeAList();
List<?> l2 = api.gimmeAnotherList();
if (l1.getGenericType().isAssignableFrom(l2.getGenericType())) {
l1.addAll(l2); //why on earth would I be doing this anyway?
findClass()
প্যারামিটারাইজেশন উপেক্ষা করতে হবে, তবে defineClass()
পারে নি)। এবং যেমনটি আমরা জানি, সেই শক্তিগুলি যে সামঞ্জস্যতার প্যারামাউন্টকে পিছনে রাখে।