মধ্যে পার্থক্য কি কি List
, List<?>
, List<T>
, List<E>
, এবং List<Object>
?
1. তালিকা
List
: এটি একটি কাঁচা টাইপ, অতএব নয় typesafe
। কাস্টিং খারাপ হলে এটি কেবল রানটাইম ত্রুটি তৈরি করবে। কাস্ট খারাপ হলে আমরা একটি সংকলন সময় ত্রুটি চাই। ব্যবহার করার জন্য প্রস্তাবিত নয়।
2. তালিকা <?>
List<?>
আনবাউন্ডেড ওয়াইল্ডকার্ড is তবে আমি নিশ্চিত নই এটি কিসের জন্য? আমি List<?>
ইস্যু ছাড়াই মুদ্রণ করতে পারি :
public static void test(List<?> list){
System.out.println(list); // Works
}
আমি কেন আইটেম যুক্ত করতে পারি না List<?>
?
public static void test(List<?> list){
list.add(new Long(2)); // Error
list.add("2"); // Error
System.out.println(list);
}
3. তালিকা <টি>
public static void test(List<T> list){ // T cannot be resolved
System.out.println(list);
}
আমি এই বাক্যবিন্যাস বুঝতে পারি না। আমি এরকম কিছু দেখেছি এবং এটি কাজ করে:
public <T> T[] toArray(T[] a){
return a;
}
কখনও কখনও, আমি দেখতে <T>
, বা <E>
, বা <U>
, <T,E>
। এগুলি কি সব একই বা তারা আলাদা কিছু উপস্থাপন করে?
4. তালিকা <অবজেক্ট>
এটি ত্রুটিটি দেয় " test(List<Object>)
তর্কটির জন্য পদ্ধতিটি প্রযোজ্য নয় List<String>
":
public static void test(List<Object> list){
System.out.println(list);
}
যদি আমি এই তারপর চেষ্টা আমি পেয়েছিলাম "থেকে নিক্ষেপ করা যাবে না List<String>
করার List<Object>
":
test((List<Object>) names);
আমি দ্বিধান্বিত. String
একটি সাবক্লাস হয় Object
, তাহলে কেন List<String>
একটি সাবক্লাস নয় List<Object>
?
2
। এটিকে প্রদর্শনের জন্য আমি কিছু কোড লিখি2
। tyvm