আমার প্রশ্নটি উপরের মতো। দুঃখিত, এটি সম্ভবত একটি সদৃশ তবে <?>
শেষের দিক দিয়ে আমি উদাহরণ খুঁজে পেলাম না ।
আপনি কেন কেবল Class
প্যারামিটার হিসাবে ব্যবহার করবেন না ?
আমার প্রশ্নটি উপরের মতো। দুঃখিত, এটি সম্ভবত একটি সদৃশ তবে <?>
শেষের দিক দিয়ে আমি উদাহরণ খুঁজে পেলাম না ।
আপনি কেন কেবল Class
প্যারামিটার হিসাবে ব্যবহার করবেন না ?
উত্তর:
Class
একটি প্যারামিটারাইজেবল বর্গ, সুতরাং আপনি Class<T>
যেখানে বাক্য তৈরি করেন সেখানে বাক্য গঠন ব্যবহার করতে পারেন T
। লিখে Class<?>
, আপনি এমন কোনও Class
বস্তু ঘোষণা করছেন যা কোনও ধরণের ( ?
ওয়াইল্ডকার্ড) হতে পারে। Class
ধরনের একটি প্রকার একটি বর্গ সম্পর্কে মেটা-তথ্য থাকে।
জেনেরিক প্রকারটি নির্দিষ্ট করে তার নির্দিষ্ট প্রকারটি নির্দিষ্ট করে উল্লেখ করে, Class<?>
আপনি এই অনুশীলনটিকে সম্মান করছেন (আপনি Class
প্যারামিটারাইজ করার যোগ্যতা সম্পর্কে অবগত আছেন ) ব্যবহার করে সর্বদা ভাল অনুশীলন তবে আপনি নিজের প্যারামিটারকে নির্দিষ্ট ধরণের সীমাবদ্ধ করছেন না।
জেনারিক্স এবং ওয়াইল্ডকার্ডস সম্পর্কিত রেফারেন্স: http://docs.oracle.com/javase/tutorial/java/generics/wildcards.html
Class
অবজেক্ট এবং রিফ্লেকশন সম্পর্কে রেফারেন্স (জাভা ভাষার বৈশিষ্ট্য নিজেই অন্তর্দর্শন করতে ব্যবহৃত হয়েছিল): https://www.oracle.com/technetwork/articles/java/javareflection-1536171.html
Class
কোনও প্রকার ছাড়াই এটি ব্যবহার করে কী লাভ ? তারা একই জিনিস উপস্থাপন বলে মনে হচ্ছে।
?
ওয়াইল্ডকার্ড দিচ্ছি ।" । আপনি যদি ওয়াইল্ডকার্ড না দেন তবে সংকলকটি ধরে নিয়েছে যে আপনি হয় প্রকারটি ভুলে গেছেন বা ক্লাসটি জেনেরিক ছিল তা জানেন না এবং এটি সম্পর্কে আপনাকে সতর্ক করবেন।
Class<?>
Class
একটি যুক্তি টাইপ যা পাস করা যাবে না Class<?>
, তাই Class<?>
সব পরিস্থিতির জন্য আরও সুবিধাজনক।
এটি <?>
একটি জন্তু। এটি প্রায়শই বিভ্রান্তি এবং ত্রুটির দিকে পরিচালিত করে, কারণ, আপনি যখন এটি প্রথম দেখেন, তখন আপনি বিশ্বাস শুরু করেন, কোনও জাভা ধরণের<?>
জন্য একটি ওয়াইল্ডকার্ড । যা সত্য নয়. হয় অজানা টাইপ , সামান্য এবং কদর্য পার্থক্য।<?>
আপনি এটি ব্যবহার করার সময় এটি কোনও সমস্যা নয় Class
। উভয় লাইন কাজ করে এবং সংকলন:
Class anyType = String.class;
Class <?> theUnknownType = String.class;
তবে - যদি আমরা সংগ্রহগুলি দিয়ে এটি ব্যবহার শুরু করি, তবে আমরা অদ্ভুত সংকলনের সময় ত্রুটিগুলি দেখতে পাই:
List<?> list = new ArrayList<Object>(); // ArrayList<?> is not allowed
list.add("a String"); // doesn't compile ...
আমাদের List<?>
কোনও সংগ্রহ নয়, এটি কেবল কোনও ধরণের অবজেক্টের জন্য উপযুক্ত। এটি কেবলমাত্র এক প্রকারের সংরক্ষণ করতে পারে: মরমী "আনকাউন টাইপ"। কোনটি আসল ধরণের নয়, তা অবশ্যই।
এর অর্থ আপনার শ্রেণি রেফারেন্সটি কোনও শ্রেণীর অবজেক্টের রেফারেন্স রাখতে পারে।
এটি মূলত "ক্লাস" এর মতো তবে আপনি অন্যদের দেখিয়েছেন যারা আপনার কোড পড়েছেন যা আপনি জেনেরিকগুলি সম্পর্কে ভোলেননি, আপনি কেবল একটি রেফারেন্স চান যা কোনও শ্রেণীর অবজেক্ট ধরে রাখতে পারে।
ব্রুস এক্কেল, জাভাতে ভাবছেন:
জাভা এসই 5 তে ক্লাস <?> সমতুল্য ক্লাসের চেয়ে বেশি পছন্দ করা হয়, যদিও তারা সমতুল্য এবং প্লেইন ক্লাস যেমনটি আপনি দেখেছেন, সংকলক সতর্কতা তৈরি করে না। ক্লাস <?> এর সুবিধাটি হ'ল এটি ইঙ্গিত দেয় যে আপনি দুর্ঘটনাক্রমে বা অজ্ঞতার বাইরে কেবল একটি নির্দিষ্ট-নির্দিষ্ট শ্রেণীর রেফারেন্স ব্যবহার করছেন না। আপনি অ-নির্দিষ্ট সংস্করণটি বেছে নিয়েছেন।
এটি জেনেরিক আক্ষরিক। এর অর্থ হল যে আপনি জানেন না যে শ্রেণীর ধরণটি এই Class
উদাহরণটি উপস্থাপন করছে তবে আপনি এখনও জেনেরিক সংস্করণ ব্যবহার করছেন।
Class<Foo>
। এইভাবে আপনি একটি নতুন উদাহরণ তৈরি করতে পারেন, উদাহরণস্বরূপ, castালাই ছাড়াই:Foo foo = clazz.newInstance();