আমি যে কোনও বস্তুর অর্থ বোঝাতে আগে ওয়াইল্ডকার্ডটি দেখেছি - তবে সম্প্রতি এর ব্যবহার দেখেছি:
<? extends Object>
যেহেতু সমস্ত বস্তু অবজেক্টকে প্রসারিত করে, এই দুটি ব্যবহারের সমার্থক?
আমি যে কোনও বস্তুর অর্থ বোঝাতে আগে ওয়াইল্ডকার্ডটি দেখেছি - তবে সম্প্রতি এর ব্যবহার দেখেছি:
<? extends Object>
যেহেতু সমস্ত বস্তু অবজেক্টকে প্রসারিত করে, এই দুটি ব্যবহারের সমার্থক?
উত্তর:
<?>এবং <? extends Object>সমার্থক, যেমনটি আপনি আশা করেছিলেন।
জেনেরিক্সের সাথে কয়েকটি ক্ষেত্রে রয়েছে যেখানে extends Objectবাস্তবে অনর্থক নয়। উদাহরণস্বরূপ, <T extends Object & Foo>কারণ হবে Tপরিণত Objectইরেজিওর অধীনে, যেহেতু সঙ্গে <T extends Foo>এটা হয়ে যাবে Fooইরেজিওর অধীনে। (আপনি যদি প্রাক জেনারিক এপিআই ব্যবহার করেছেন তার সাথে সামঞ্জস্যতা বজায় রাখার চেষ্টা করছেন তবে এটি বিষয়টি বিবেচনা করতে পারে Object))
সূত্র: http://download.oracle.com/javase/tutorial/extra/generics/convert.html ; এটি ব্যাখ্যা করে যে কেন java.util.Collectionsএই স্বাক্ষর সহ জেডিকের শ্রেণীর একটি পদ্ধতি রয়েছে:
public static <T extends Object & Comparable<? super T>> T max(
Collection<? extends T> coll
)
extends Objectআসলে হয় অর্থপূর্ণ। যদি আমার ভুল হয়ে থাকে তবে আমি ক্ষমা চাইছি। আশা করি কমপক্ষে আপনার প্রশ্নটি আসা অন্যান্য লোকদের পক্ষে এটি আগ্রহী হবে।
যদিও <?>এটির জন্য একটি শর্টকাট হওয়ার কথা রয়েছে <? extend object>, তবে উভয়ের মধ্যে একটি ছোট পার্থক্য রয়েছে।
<?>পুনরুদ্ধারযোগ্য যখন <? extend object>না হয়। তারা এটি করার কারণটি হ'ল পুনরায় সংশোধনযোগ্য প্রকারের পার্থক্যটি আরও সহজ করে তোলা। দেখে মনে হচ্ছে কিছু যে <? extends something>, <T>, <Integer>nonreifiable হয়।
উদাহরণস্বরূপ, এই কোডটি কাজ করবে
List aList = new ArrayList<>();
boolean instanceTest = aList instanceof List<?>;
তবে এটি একটি ত্রুটি দেয়
List aList = new ArrayList<>();
boolean instancetest = aList instanceof List<? extends Object>;
আরও তথ্যের জন্য জাভা জেনেরিকস এবং মরিস নাফটালিনের সংগ্রহগুলি পড়ুন
<?>একটি সংক্ষিপ্তকরণ <? extends Object>। আপনি আরও তথ্যের জন্য নীচে ভাগ করা লিঙ্কটি পড়তে পারেন।
<?>
"?"কোনও অজানা প্রকারকে বোঝায়, এটি কোডে কোনও প্রকারের প্রতিনিধিত্ব করতে পারে। আপনি টাইপ সম্পর্কে নিশ্চিত না হলে এই ওয়াইল্ডকার্ডটি ব্যবহার করুন।
ArrayList<?> unknownList = new ArrayList<Number>(); //can accept of type Number
unknownList = new ArrayList<Float>(); //Float is of type Number
দ্রষ্টব্য: <?> অর্থ যে কোনও কিছু। সুতরাং এটি টাইপকে মেনে নিতে পারে যা Objectশ্রেণি থেকে প্রাপ্ত হয় না ।
<? extends Object>
<? extends Object>এর অর্থ আপনি কোনও অবজেক্ট বা একটি সাব-ক্লাস পাস করতে পারেন যা Objectক্লাস প্রসারিত করে ।
ArrayList<? extends Number> numberList = new ArrayList<Number>(); //Number of subclass
numberList = new ArrayList<Integer>(); //Integer extends Number
numberList = new ArrayList<Float>(); // Float extends Number
টি -
E টাইপ ই বোঝাতে ব্যবহৃত হয় -
কে - কী
ভ - মান
N - সংখ্যার জন্য উল্লেখ করে
রেফ:
Object।