কিভাবে জাভাতে সমস্ত এনাম মান পাবেন?


96

আমি এই সমস্যার enumমুখোমুখি হয়েছি যে আসল প্রকারটি না জেনে আমি এর সম্ভাব্য মানগুলি পুনরাবৃত্তি করা দরকার।

if (value instanceof Enum){
   Enum enumValue = (Enum)value;
}

কোনও ধারণা কীভাবে এনামভ্যালু এর সম্ভাব্য মানগুলি থেকে নিষ্কাশন করবেন?

উত্তর:


154
Object[] possibleValues = enumValue.getDeclaringClass().getEnumConstants();

আপনি কেন getDeclaringClass () ব্যবহার করবেন?
পিটার ক্রিয়েন্স

4
@PeterKriens: যেহেতু getClass()একটি অন enumবস্তুর একটি ফেরত দিতে পারেন উপপ্রকার এর enumটাইপ নিজেই (যদি, বলে, enumধ্রুবক একটি পদ্ধতি থেকে অগ্রাহ্য enumটাইপ)। getDeclaringClass()ফেরৎ enumযে ধরনের যে ধ্রুব ঘোষণা যা তুমি এখানে কি চাই।
কলিন্ড

ধন্যবাদ! আমি এই ঘটনাটি বুঝতে পারি নি তবে আপনি ঠিক বলেছেন, ধ্রুবকটি কোনও বেনামে অন্তর্গত শ্রেণীর হতে পারে।
পিটার ক্রিয়েন্স

101
YourEnumClass[] yourEnums = YourEnumClass.class.getEnumConstants();

বা

YourEnumClass[] yourEnums = YourEnumClass.values();

YourEnumClass[] yourEnums = YourEnumClass.class.getEnumConstants();একটি স্থিতিশীল পদ্ধতি থেকে কল করার আমার সমস্যার সমাধান করুন।
জেরেমি

15

Enums এগুলি যেমন Classটাইপ করা হয় ঠিক তেমন হয়। আপনার বর্তমান কোডটি পরীক্ষা করে দেখায় যে এটি এনুম কিনা তা কোন ধরণের এনুমের একটি অংশ তা উল্লেখ না করেই রয়েছে।

আপনি এনামের ধরণ নির্দিষ্ট না করায় এনুম মানগুলির তালিকা কী তা জানতে আপনাকে প্রতিবিম্ব ব্যবহার করতে হবে।

আপনি এটি এর মতো করতে পারেন:

enumValue.getDeclaringClass().getEnumConstants() 

এটি প্রতিটি উপলব্ধ বিকল্পগুলির মধ্যে একটি সহ এনাম অবজেক্টগুলির একটি অ্যারের ফিরিয়ে দেবে।


14

এনাম মান পদ্ধতি

enum.values ​​() পদ্ধতি যা সমস্ত এনাম উদাহরণগুলি প্রদান করে।

  public class EnumTest {
        private enum Currency {
        PENNY("1 rs"), NICKLE("5 rs"), DIME("10 rs"), QUARTER("25 rs");
        private String value;
        private Currency(String brand) {
              this.value = brand;
        }

        @Override
        public String toString() {
              return value;
        }
  }

  public static void main(String args[]) {

        Currency[] currencies = Currency.values();

        // enum name using name method
        // enum to String using toString() method
        for (Currency currency : currencies) {
              System.out.printf("[ Currency : %s,
                         Value : %s ]%n",currency.name(),currency);
        }
  }
}

http://javaexplorer03.blogspot.in/2015/10/name-and-values-method-of-enum.html


7

... বা MyEnum.values ​​()? নাকি আমি কিছু মিস করছি?


4
হ্যাঁ, এনামের আসল শ্রেণি এখানে স্ট্যাটিক পদ্ধতি কল করতে পাওয়া যায় না, এনামের কিছু উপ টাইপের উদাহরণ instance
কলিনড

4

এখানে, ভূমিকাটি এমন একটি এনাম যা নিম্নলিখিত মানগুলিতে [অ্যাডমিন, ব্যবহারকারী, OTHER] রয়েছে।

List<Role> roleList = Arrays.asList(Role.values());
roleList.forEach(role -> {
    System.out.println(role);
    });

তবে এটি জেনেরিক নয়। প্রশ্নটি ক্ষেত্রে হয় যখন কেবল এনাম অবজেক্ট থাকে। সুতরাং আপনাকে হয় এনামসেটের মাধ্যমে ক্লাস বা আরও ভাল ডিক্লেয়ারিংয়ের মাধ্যমে যেতে হবে।
zeratul021

3

যে কেউ java.util.EnumSet এর মতো ব্যবহার করতে পারে

@Test
void test(){
    Enum aEnum =DayOfWeek.MONDAY;
    printAll(aEnum);
}

void printAll(Enum value){
    Set allValues = EnumSet.allOf(value.getClass());
    System.out.println(allValues);
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.