এর অর্থ হ'ল এনুমের জন্য টাইপ আর্গুমেন্টটি এমন এনম থেকে উদ্ভূত হয় যা নিজে একই ধরণের যুক্তিযুক্ত। কীভাবে এটি ঘটতে পারে? টাইপ আর্গুমেন্ট তৈরি করে নিজেই নতুন টাইপ করুন। সুতরাং যদি আমি স্ট্যাটাসকোড নামে একটি এনাম পেয়েছি তবে এটি সমান হবে:
public class StatusCode extends Enum<StatusCode>
এখন যদি আপনি সীমাবদ্ধতার পরীক্ষা, আমরা পেয়েছেন Enum<StatusCode>
- তাই E=StatusCode
। আসুন চেক করুন: E
প্রসারিত হয় Enum<StatusCode>
? হ্যাঁ! আমরা ঠিক আছি
আপনি নিজেরাই নিজেকে ভালভাবে জিজ্ঞাসা করতে পারেন এর মূল বিষয়টি কী: :) ওয়েল, এর অর্থ এনুমের এপিআই নিজেই উল্লেখ করতে পারে - উদাহরণস্বরূপ, এই Enum<E>
প্রয়োগগুলি বলতে সক্ষম হয়ে Comparable<E>
। বেস ক্লাসটি তুলনা করতে সক্ষম (এনামগুলির ক্ষেত্রে) তবে এটি নিশ্চিত করতে পারে যে এটি কেবল সঠিক ধরণের এনামগুলির একে অপরের সাথে তুলনা করে। (সম্পাদনা: আচ্ছা, প্রায় - নীচে সম্পাদনাটি দেখুন))
আমি আমার সি # পোর্ট প্রোটোকলবাফারগুলিতে অনুরূপ কিছু ব্যবহার করেছি। সেখানে "বার্তা" (অপরিবর্তনীয়) এবং "নির্মাতারা" (পরিবর্তনযোগ্য, একটি বার্তা তৈরি করতে ব্যবহৃত হয়) - এবং এগুলি জোড়া ধরণের হিসাবে আসে। জড়িত ইন্টারফেসগুলি হ'ল:
public interface IBuilder<TMessage, TBuilder>
where TMessage : IMessage<TMessage, TBuilder>
where TBuilder : IBuilder<TMessage, TBuilder>
public interface IMessage<TMessage, TBuilder>
where TMessage : IMessage<TMessage, TBuilder>
where TBuilder : IBuilder<TMessage, TBuilder>
এর অর্থ হ'ল কোনও বার্তা থেকে আপনি একটি উপযুক্ত নির্মাতা পেতে পারেন (যেমন কোনও বার্তার অনুলিপি নিতে এবং কিছু বিট পরিবর্তন করতে) এবং কোনও বিল্ডারের কাছ থেকে আপনি এটি তৈরির কাজ শেষ করার পরে একটি উপযুক্ত বার্তা পেতে পারেন। এটিআইপি-র একটি ভাল কাজের ব্যবহারকারীদের যদিও এটি সম্পর্কে আসলেই যত্ন নেওয়া দরকার না - এটি ভয়াবহভাবে জটিল complicated এবং এটি যেখানে রয়েছে সেখানে যেতে বেশ কয়েকটি পুনরাবৃত্তি নিয়েছিল।
সম্পাদনা: নোট করুন যে এটি আপনাকে বিজোড় প্রকার তৈরি করতে বাধা দেয় না যা কোনও টাইপ আর্গুমেন্ট ব্যবহার করে যা নিজেই ঠিক আছে, তবে যা একই ধরণের নয়। উদ্দেশ্যটি হ'ল ভুল ক্ষেত্রে থেকে আপনাকে রক্ষা করার চেয়ে সঠিক ক্ষেত্রে সুবিধা দেওয়া ।
সুতরাং Enum
জাভাতে যদি "বিশেষভাবে" পরিচালনা না করা হয় তবে আপনি (মন্তব্যে উল্লিখিত হিসাবে) নিম্নলিখিত ধরণের তৈরি করতে পারেন:
public class First extends Enum<First> {}
public class Second extends Enum<First> {}
Second
Comparable<First>
পরিবর্তে বাস্তবায়ন Comparable<Second>
... কিন্তু First
নিজেই ভাল হবে।