? extends HasWord
মানে "একটি শ্রেণি / ইন্টারফেস যা প্রসারিত হয় HasWord
।" অন্য কথায়, HasWord
নিজে বা তার যে কোনও শিশু ... মূলত এমন কিছু যা instanceof HasWord
প্লাস দিয়ে কাজ করবে null
।
আরও প্রযুক্তিগত ভাষায়, ? extends HasWord
একটি সীমাবদ্ধ ওয়াইল্ডকার্ড, কার্যকর জাভা তৃতীয় সংস্করণের আইটেম 31-এ আচ্ছাদিত , যা ১৩৯ পৃষ্ঠায় শুরু হয়েছে the দ্বিতীয় সংস্করণের একই অধ্যায়টি পিডিএফ হিসাবে অনলাইনে উপলব্ধ ; সীমানা ওয়াইল্ডকার্ডের অংশটি আইটেম 28 পৃষ্ঠা থেকে শুরু হওয়া 134 page
আপডেট: পিডিএফ লিঙ্কটি আপডেট হয়েছিল যেহেতু ওরাকল কিছুক্ষণ আগে এটিকে সরিয়েছে। এটি এখন লন্ডনের স্কুল অফ ইলেক্ট্রনিক ইঞ্জিনিয়ারিং এবং কম্পিউটার সায়েন্সের কুইন মেরি বিশ্ববিদ্যালয় দ্বারা আয়োজিত অনুলিপিটির দিকে ইঙ্গিত করে।
আপডেট 2: আপনি কেন ওয়াইল্ডকার্ড ব্যবহার করতে চান তা আরও কিছু বিশদে যেতে দিন।
আপনি যদি একটি পদ্ধতি যার স্বাক্ষর ঘোষণা তাহলে আশা আপনি পাস List<HasWord>
, তারপর একমাত্র জিনিস আপনি পাস করতে পারেন একটি হল List<HasWord>
।
তবে, যদি স্বাক্ষরটি বলা হয় List<? extends HasWord>
তবে আপনি তার List<ChildOfHasWord>
পরিবর্তে পাস করতে পারেন ।
মনে রাখবেন যে List<? extends HasWord>
এবং এর মধ্যে একটি সূক্ষ্ম পার্থক্য রয়েছে List<? super HasWord>
। জোশুয়া ব্লচ যেমন লিখেছেন: পিইসিএস = প্রযোজক-প্রসারিত, ভোক্তা-সুপার।
এর অর্থ হ'ল যদি আপনি কোনও সংগ্রহটিতে যাচ্ছেন যা আপনার পদ্ধতিটি ডেটা টেনে আনে (যেমন সংগ্রহটি আপনার পদ্ধতির ব্যবহারের জন্য উপাদান তৈরি করছে), আপনার ব্যবহার করা উচিত extends
। যদি আপনি কোনও সংগ্রহটিতে যাচ্ছেন যা আপনার পদ্ধতিতে ডেটা যুক্ত করে (যেমন সংগ্রহটি আপনার পদ্ধতি তৈরির উপাদানগুলি গ্রাস করছে), এটি ব্যবহার করা উচিত super
।
এটি বিভ্রান্তিকর লাগতে পারে। যাইহোক, যদি আপনি এটা দেখতে পারেন List
এর sort
কমান্ড (যা Collections.sort দুই-ARG সংস্করণে মাত্র একটি শর্টকাট)। পরিবর্তে এটি গ্রহণ করার পরিবর্তে Comparator<T>
এটি গ্রহণ করে Comparator<? super T>
। এই ক্ষেত্রে, List
তুলনাকারী তালিকাটি নিজেই পুনরায় অর্ডার করার জন্য উপাদানগুলির উপাদানগুলি গ্রাস করছে।