<?> এবং <এর মধ্যে পার্থক্য কী? জাভা জেনারিক্সে অবজেক্ট> প্রসারিত করে?


96

আমি যে কোনও বস্তুর অর্থ বোঝাতে আগে ওয়াইল্ডকার্ডটি দেখেছি - তবে সম্প্রতি এর ব্যবহার দেখেছি:

<? extends Object>

যেহেতু সমস্ত বস্তু অবজেক্টকে প্রসারিত করে, এই দুটি ব্যবহারের সমার্থক?


4
ইহা একই জিনিস. দেখুন stackoverflow.com/questions/2274720/...
ড্যান

4
@ ডান আপনি যদি এই প্রশ্নটিতে "? প্রসারিত অবজেক্ট" অনুসন্ধান করেন তবে আপনার কিছুই পাওয়া যায় না। আমি কোনও কিছু অনুমান করতে পারি কিনা তা দেখতে আমি উত্তরগুলি পড়ছি তবে আমার মনে হয় না এটি এটি। বিশেষত, এটি জেনেরিকের বিষয়ে কথা বলছে না।
অরবফিশ

@ ড্যান - এটি একটি আলাদা প্রশ্ন। আমি এই প্রশ্নটি আগে দেখেছি এবং কমপক্ষে একটি সূক্ষ্ম পার্থক্যের একটি উল্লেখ আমার মনে আছে। আমি এটি খুঁজে পেতে পারি কিনা তা আমাকে দেখতে দিন ..
পল বেলোরা

: এটা এই এক না আপনি তা খুঁজে পেতে যদি stackoverflow.com/questions/678822/...
orbfish

4
এখানে আমরা যাচ্ছি: জাভাতে আনবাউন্ডেড ওয়াইল্ডকার্ডের সম্ভাব্য সদৃশ (কেভিন
বুউরিলিয়ানের

উত্তর:


104

<?>এবং <? 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
)

4
উদাহরণটি কীভাবে সম্পর্কিত তা আমি অস্পষ্ট? (যেহেতু এটি <?> বা <? অবজেক্ট>
নাও ব্যবহার করে

27
@orbfish: এটা শুধুমাত্র যে আমি ভেবেছিলাম তুমি, এটা আকর্ষণীয় এটি হবে যেমন একটি উদাহরণ কোথায় সম্পর্কিত extends Objectআসলে হয় অর্থপূর্ণ। যদি আমার ভুল হয়ে থাকে তবে আমি ক্ষমা চাইছি। আশা করি কমপক্ষে আপনার প্রশ্নটি আসা অন্যান্য লোকদের পক্ষে এটি আগ্রহী হবে।
রুখ

@রুখ - টাইপ প্যারামিটারের চেয়ে সীমাবদ্ধ ওয়াইল্ডকার্ডে আগ্রহী ছিল, তবে কমপক্ষে, আপনি উত্তর দিয়েছেন।
অরবফিশ

4
আপনার এটি তখন আপনার মূল পোস্টে বলা উচিত ছিল। এইভাবে, তার উত্তরটি আপনার আরও প্রাসঙ্গিক হতে পারে।
liltitus27

19

যদিও <?>এটির জন্য একটি শর্টকাট হওয়ার কথা রয়েছে <? 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>;

আরও তথ্যের জন্য জাভা জেনেরিকস এবং মরিস নাফটালিনের সংগ্রহগুলি পড়ুন


কীভাবে তালিকাটি <?> সংশোধনযোগ্য হতে পারে যদি সংকলক এটি তালিকাতে অনুবাদ করে <ওবজেক্ট> তাই কী ধরণের তথ্য সম্পর্কে? হারিয়ে গেছে?
Trismegistos

আমি কী বিশ্বাস করি <?> লিগ্যাসি এপিআইয়ের সাথে পিছনে সামঞ্জস্য করার জন্য আরও নকশাকৃত। <অবজেক্ট> এবং <এর সাথে পার্থক্য করতে? অবজেক্ট> প্রসারিত যা জাভা 5 কোড পোস্ট।
ডেনিস সি

9

<?>একটি সংক্ষিপ্তকরণ <? 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
হ্যাকজুতু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.