ক্লাস <?> জাভা মানে কি?


135

আমার প্রশ্নটি উপরের মতো। দুঃখিত, এটি সম্ভবত একটি সদৃশ তবে <?>শেষের দিক দিয়ে আমি উদাহরণ খুঁজে পেলাম না ।

আপনি কেন কেবল Classপ্যারামিটার হিসাবে ব্যবহার করবেন না ?



উত্তর:


109

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


7
কেবল Classকোনও প্রকার ছাড়াই এটি ব্যবহার করে কী লাভ ? তারা একই জিনিস উপস্থাপন বলে মনে হচ্ছে।
ashes999

1
আমি ভেবেছিলাম জেনেরিকের পুরো পয়েন্টটি আপনি ক্লাস টাইপ অফফ্রন্ট জানেন না। অন্যথায় আপনি প্যারামিটারের জন্য কোনও নির্দিষ্ট শ্রেণির প্রকারটি ব্যবহার করতে কেবল একটি ফাংশন সংজ্ঞায়িত করবেন। এই প্রশ্ন চিহ্নটি এখনও বোঝায় না।
Brain2000

5
আপনি সংকলককে বলছেন ব্যতীত অন্য কোনও সুবিধা নেই যে "আমি জানি এটি একটি জেনেরিক শ্রেণি, তবে আমি প্রকৃত প্রকারটি সম্পর্কে জানি না বা যত্ন করি না, সুতরাং একটি কংক্রিট টাইপের পরিবর্তে আমি ?ওয়াইল্ডকার্ড দিচ্ছি ।" । আপনি যদি ওয়াইল্ডকার্ড না দেন তবে সংকলকটি ধরে নিয়েছে যে আপনি হয় প্রকারটি ভুলে গেছেন বা ক্লাসটি জেনেরিক ছিল তা জানেন না এবং এটি সম্পর্কে আপনাকে সতর্ক করবেন।
কায়মন


কেবল Classএকটি যুক্তি টাইপ যা পাস করা যাবে না Class<?>, তাই Class<?>সব পরিস্থিতির জন্য আরও সুবিধাজনক।
পিটারটেক

72

এটি <?>একটি জন্তু। এটি প্রায়শই বিভ্রান্তি এবং ত্রুটির দিকে পরিচালিত করে, কারণ, আপনি যখন এটি প্রথম দেখেন, তখন আপনি বিশ্বাস শুরু করেন, কোনও জাভা ধরণের<?> জন্য একটি ওয়াইল্ডকার্ড । যা সত্য নয়. হয় অজানা টাইপ , সামান্য এবং কদর্য পার্থক্য।<?>

আপনি এটি ব্যবহার করার সময় এটি কোনও সমস্যা নয় 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<?>কোনও সংগ্রহ নয়, এটি কেবল কোনও ধরণের অবজেক্টের জন্য উপযুক্ত। এটি কেবলমাত্র এক প্রকারের সংরক্ষণ করতে পারে: মরমী "আনকাউন টাইপ"। কোনটি আসল ধরণের নয়, তা অবশ্যই।


8

এর অর্থ আপনার শ্রেণি রেফারেন্সটি কোনও শ্রেণীর অবজেক্টের রেফারেন্স রাখতে পারে।

এটি মূলত "ক্লাস" এর মতো তবে আপনি অন্যদের দেখিয়েছেন যারা আপনার কোড পড়েছেন যা আপনি জেনেরিকগুলি সম্পর্কে ভোলেননি, আপনি কেবল একটি রেফারেন্স চান যা কোনও শ্রেণীর অবজেক্ট ধরে রাখতে পারে।

ব্রুস এক্কেল, জাভাতে ভাবছেন:

জাভা এসই 5 তে ক্লাস <?> সমতুল্য ক্লাসের চেয়ে বেশি পছন্দ করা হয়, যদিও তারা সমতুল্য এবং প্লেইন ক্লাস যেমনটি আপনি দেখেছেন, সংকলক সতর্কতা তৈরি করে না। ক্লাস <?> এর সুবিধাটি হ'ল এটি ইঙ্গিত দেয় যে আপনি দুর্ঘটনাক্রমে বা অজ্ঞতার বাইরে কেবল একটি নির্দিষ্ট-নির্দিষ্ট শ্রেণীর রেফারেন্স ব্যবহার করছেন না। আপনি অ-নির্দিষ্ট সংস্করণটি বেছে নিয়েছেন।


1
উক্তিটি "ক্লাস <?> সরল শ্রেণীর চেয়ে বেশি পছন্দ করে" এবং "শ্রেণীর সুবিধা <?>" বলে উল্লেখ করেছে। দেখে মনে হচ্ছে ব্লককোটটি কৌনিক বন্ধনীগুলির সাথে একমত নয়।
ফিলিপ

1
এড়াতে হবে। এটি এখনই ঠিক করুন: পি
সামি কুহমনেন

5

এটি জেনেরিক আক্ষরিক। এর অর্থ হল যে আপনি জানেন না যে শ্রেণীর ধরণটি এই Classউদাহরণটি উপস্থাপন করছে তবে আপনি এখনও জেনেরিক সংস্করণ ব্যবহার করছেন।

  • আপনি যদি ক্লাসটি জানতেন তবে আপনি ব্যবহার করতেন Class<Foo>। এইভাবে আপনি একটি নতুন উদাহরণ তৈরি করতে পারেন, উদাহরণস্বরূপ, castালাই ছাড়াই:Foo foo = clazz.newInstance();
  • যদি আপনি জেনেরিকটি একেবারেই ব্যবহার না করেন তবে আপনি কমপক্ষে একটি সতর্কতা পেয়ে যাবেন (এবং জেনেরিকগুলি ব্যবহার না করা সাধারণত নিরুৎসাহিত করা হয় কারণ এটি সনাক্তকরণের হার্ড-পার্শ্ব প্রতিক্রিয়া হতে পারে)

5

জেনেরিক্সে, একটি অজানা প্রকারটি ওয়াইল্ডকার্ড চরিত্র "?" দ্বারা উপস্থাপন করা হয়। সরকারী উদাহরণের জন্য এখানে পড়ুন ।


3

এর অর্থ এক ধরণের কিছু (অজানা) সহ একটি শ্রেণি।

এটি আরও ভালভাবে বুঝতে আপনার জাভা জেনেরিকের টিউটোরিয়ালটি পড়া উচিত

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.