জাভা: এনামে একটি প্রদত্ত স্ট্রিং রয়েছে কিনা তা পরীক্ষা করুন?


169

আমার সমস্যাটি এখানে - আমি এনামের সমতুল্য (যদি তা বিদ্যমান থাকে )ও খুঁজছি ArrayList.contains();

আমার কোড সমস্যার একটি নমুনা এখানে:

enum choices {a1, a2, b1, b2};

if(choices.???(a1)}{
//do this
} 

এখন আমি বুঝতে পারি যে একটি ArrayListএর Stringsভাল রুট এখানে হবে কিন্তু আমি অন্যত্র একটি সুইচ / কেস মাধ্যমে আমার enum বিষয়বস্তু চালানোর আছে। সুতরাং আমার সমস্যা।

এই ধরণের কোনও অস্তিত্ব নেই বলে ধরে নিয়ে আমি কীভাবে এটি চালিয়ে যেতে পারি?


স্ট্রিং সহ স্যুইচ /
কেসটি

উত্তর:


205

এটি করা উচিত:

public static boolean contains(String test) {

    for (Choice c : Choice.values()) {
        if (c.name().equals(test)) {
            return true;
        }
    }

    return false;
}

এই উপায়টির অর্থ হল পরে আপনাকে অতিরিক্ত এনাম মানগুলি যোগ করার বিষয়ে চিন্তা করতে হবে না, সেগুলি সব চেক করা আছে।

সম্পাদনা: এনাম খুব বড় হলে আপনি একটি হ্যাশসেটে মানগুলি আটকে রাখতে পারেন:

public static HashSet<String> getEnums() {

  HashSet<String> values = new HashSet<String>();

  for (Choice c : Choice.values()) {
      values.add(c.name());
  }

  return values;
}

তারপরে আপনি ঠিক করতে পারেন: values.contains("your string")যা সত্য বা মিথ্যা প্রত্যাবর্তন করে।


12
এটি একটি খুব দরিদ্র ইমপ্লিট .: Choice.valueOf (পরীক্ষা) আপনি যা চান (
ডাব্লু

17
অবশ্যই, এটি স্পষ্টভাবে সবচেয়ে উপযুক্ত সমাধান। এক ধরণের বিদ্যমান () পদ্ধতি প্রয়োগের জন্য একটি ব্যতিক্রম ছুঁড়ে ফেলা বাজে অভ্যাস। আপনি যদি ভাবতে পারেন যে আপনার বাস্তবায়ন এটি O (n) না দেখার কারণে আরও কার্যকর তবে এটি অন্তর্নিহিত কাঠামোর মধ্যে রয়েছে যা দৃশ্যমান নয়। এছাড়াও চেষ্টা করে দেখুন {ক্যাচ ওভারহেড যুক্ত করে। এছাড়াও, এটি ঠিক সুন্দর নয়।
jluzwick

25
@ জ্যারেড, স্পষ্টভাবে মান শুধু আপনার ব্যতিক্রম ধরা এবং মিথ্যা ফিরে। অন্যথায় যারা বলে তাদের কাছে, আপনি যদি বাস্তবায়নের দিকে নজর দেন তবে এটি ইতিমধ্যে একটি মানচিত্র ব্যবহার করেছে এবং জেডিকে বিকাশকারীদের এটিকে আরও অনুকূল করার আরও অনেক ভাল সুযোগ রয়েছে। এপিআই একটি ব্যতিক্রম নিক্ষেপ করে, যা একটি বিতর্কযোগ্য অনুশীলন (নাল ফেরার পরিবর্তে), তবে আপনি যখন কোনও ব্যতিক্রম ছুঁড়ে এমন একটি API নিয়ে কাজ করেন, তখন তার সাথে যান, চাকাটিকে পুনরায় উদ্ভাবন করবেন না।
যিশাই

2
@ জ্লুজউইক ট্রাই / ক্যাচ ওভারহেড একটি সহজ লাফের নির্দেশনা যখন নেওয়া না হয়, ক্যাচ ব্লকে ব্যতিক্রম না ব্যবহার করাও অনুকূলিত optim কর্মক্ষমতা হ্রাসের চেষ্টা / ধরা কারণকে ভয় করা একটি খারাপ অভ্যাস।
বেসেসস

22
() একটি ব্যতিক্রম সহ মান ওফ () এর চেয়ে বেশি পছন্দ করা উচিত contains কেন? কারণ "ব্যতিক্রমগুলি, তাদের নাম হিসাবে বোঝা যায় যে কেবল ব্যতিক্রমী অবস্থার জন্য ব্যবহার করা যেতে পারে; এগুলি কখনই সাধারণ নিয়ন্ত্রণ প্রবাহের জন্য ব্যবহার করা উচিত নয়" (জোশুয়া ব্লচ, "কার্যকর জাভা")।
james.garriss 20'14

226

পরিবর্তে অ্যাপাচি কমন্স lang3 lib ব্যবহার করুন

 EnumUtils.isValidEnum(MyEnum.class, myValue)

33
যারা আগ্রহী তাদের জন্য নোট করুন, অন্তর্নিহিত বাস্তবায়ন যা তারা ব্যবহার করেছেন কেবলমাত্র চেষ্টা / ধরার সমাধান (@ সেন্স 3.0.০ @ সংস্করণ $ আইডি: এনামউটিলস.জভা ১১৯৯৯৯৪-১১-১১-০৯ ১ 53: ৩৩: 59 জেড গ্রেগরি $)।
জোনাথন গাওরিচ

1
আমার কোডটিকে সহজতর করে তোলে, তাই এটি প্রবাহ নিয়ন্ত্রণের ক্ষেত্রে ব্যতিক্রম (তাদের আসলেই উচিত নয়) ব্যবহার করা উচিত কিনা তা আমি পাত্তা দিই না ... তারা যদি এটি পরিবর্তন করে তবে খুব ভাল লাগবে।
jpangamarca


1
পেয়ারাতেও কি এর মতো কোনও সমাধান থাকে?
সাইপ্রেস ফ্রাঙ্কেনফিল্ড

50

তুমি ব্যবহার করতে পার Enum.valueOf()

enum Choices{A1, A2, B1, B2};

public class MainClass {
  public static void main(String args[]) {
    Choices day;

    try {
       day = Choices.valueOf("A1");
       //yes
    } catch (IllegalArgumentException ex) {  
        //nope
  }
}

যদি আপনি চেকটি প্রায়শই ব্যর্থ হয়ে যাওয়ার আশা করেন তবে আপনি যেমন দেখিয়েছেন তেমন একটি সাধারণ লুপ ব্যবহার করা ভাল - যদি আপনার এনামগুলিতে অনেকগুলি মান থাকে , তবে সম্ভবত আপনার বিল্ড HashSetবা আপনার এনাম মানগুলির সাথে স্ট্রিংয়ে রূপান্তরিত হয় এবং HashSetপরিবর্তে এটি অনুসন্ধান করে।


8
আমি মনে করি না এই জাতীয় ক্ষেত্রে ব্যতিক্রমই সেরা পছন্দ।
গোকেনজ

6
চেষ্টা করুন এবং ক্যাচটি শেষ অবলম্বন হওয়া উচিত। চেষ্টা করুন এবং ধরুন ব্যয়বহুল
যিশু ডিম্রিক্স

2
ব্যয়বহুল ব্যতীত ব্যবসায়ের যুক্তি করতে রানটাইম ব্যতিক্রমগুলির উপর নির্ভর করা তত পাঠযোগ্য নয়। চেক করা ব্যতিক্রম সম্পর্কিত ক্ষেত্রে, এটি আলাদা, কারণ এগুলি ব্যবসায়ের অংশ করে।
লুস সোরেস

2
এটি যে কেউ পুনরায় চেষ্টা করা হচ্ছে এমন আসল ব্যতিক্রমী মামলাগুলি খুঁজে পেতে ব্যাতিক্রমের ব্যতিক্রমকে ব্যাপক বিরতি ঘটাতে বাধা দেয়। (বা কমপক্ষে এটি করা খুব বিরক্তিকর করে তোলে)। ব্যতিক্রমী ক্ষেত্রে ব্যতিক্রম ব্যবহার করুন।
নিকোলোয় কোন্ড্রাটয়েভ

4
EnumUtils.isValidEnum(MyEnum.class, myValue)একটি অনুরূপ যুক্তি এবং আইএমও ব্যবহার করে এটি এই তুচ্ছ কাজের জন্য একটি পুরো লাইব্রেরি যুক্ত করে তোলে তা বোঝা যায় না
বিক্রমজিৎ রায়

37

আপনি যদি জাভা 1.8 ব্যবহার করেন তবে আপনি এটি বাস্তবায়নের জন্য স্ট্রিম + ল্যাম্বদা চয়ন করতে পারেন:

public enum Period {
    DAILY, WEEKLY
};

//This is recommended
Arrays.stream(Period.values()).anyMatch((t) -> t.name().equals("DAILY1"));
//May throw java.lang.IllegalArgumentException
Arrays.stream(Period.values()).anyMatch(Period.valueOf("DAILY")::equals);

19

গুয়াস এনামস আপনার বন্ধু হতে পারে

যেমন:

enum MyData {
    ONE,
    TWO
}

@Test
public void test() {

    if (!Enums.getIfPresent(MyData.class, "THREE").isPresent()) {
        System.out.println("THREE is not here");
    }
}


11

আপনি প্রথমে এনামকে তালিকায় রূপান্তর করতে পারেন এবং তারপরে তালিকার ব্যবহারের পদ্ধতি রয়েছে

enum Choices{A1, A2, B1, B2};

List choices = Arrays.asList(Choices.values());

//compare with enum value 
if(choices.contains(Choices.A1)){
   //do something
}

//compare with String value
if(choices.contains(Choices.valueOf("A1"))){
   //do something
}

এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। তালিকার রূপান্তর হ'ল এটি করার সবচেয়ে পরিষ্কার উপায়। এটি এখানে অন্যান্য উত্তরে জাভাতে "ব্যতিক্রমগুলির যথাযথ ব্যবহার" সম্পর্কে পুরো (পক্ষের) আলোচনাকে ছাড়িয়েছে।
ম্যানুয়েল

মান বিদ্যমান না থাকলে অবৈধআর্গুমেন্টএক্সসেপশন নিক্ষেপ করুন।
এমকিং

10

এখানে বেশ কয়েকটি লাইব্রেরি উল্লেখ করা হয়েছে, তবে আমি যেটি আসলে খুঁজছিলাম সেটিকে আমি মিস করছি: বসন্ত!

নেই ObjectUtils # containsConstant যা ডিফল্টভাবে ক্ষেত্রে অসংবেদী হয়, কিন্তু যদি তুমি চাও কঠোর হতে পারে। এটি এভাবে ব্যবহার করা হয়:

if(ObjectUtils.containsConstant(Choices.values(), "SOME_CHOISE", true)){
// do stuff
}

দ্রষ্টব্য: কেস সংবেদনশীল চেকটি কীভাবে ব্যবহার করতে হয় তা প্রদর্শনের জন্য আমি এখানে ওভারলোডেড পদ্ধতিটি ব্যবহার করেছি। সংবেদনশীল আচরণের ক্ষেত্রে আপনি বুলিয়ানটিকে বাদ দিতে পারেন।

বড় এনামগুলির সাথে সতর্ক থাকুন, কারণ তারা মানচিত্রের প্রয়োগটি কারও কারও মতো ব্যবহার করে না ...

বোনাস হিসাবে, এটি মানটির ক্ষেত্রে একটি সংবেদনশীল বৈকল্পিক সরবরাহ করে: অবজেক্ট ইউটিস # কেসআইসেটিভ ভ্যালুওফ


9

কয়েকটি অনুমান:
1) কোনও চেষ্টা / ধরা না, কারণ এটি ব্যতিক্রমী প্রবাহ নিয়ন্ত্রণ
2) 'অন্তর্ভুক্ত' পদ্ধতিটি দ্রুত হতে হয়, কারণ এটি সাধারণত বেশ কয়েকবার চালিত হয়।
3) স্থান সীমাবদ্ধ নয় (সাধারণ সমাধানের জন্য সাধারণ)

import java.util.HashSet;
import java.util.Set;

enum Choices {
    a1, a2, b1, b2;

    private static Set<String> _values = new HashSet<>();

    // O(n) - runs once
    static{
        for (Choices choice : Choices.values()) {
            _values.add(choice.name());
        }
    }

    // O(1) - runs several times
    public static boolean contains(String value){
        return _values.contains(value);
    }
}

7

আপনি এটি ব্যবহার করতে পারেন

আপনারএনম {এ 1, এ 2, বি 1, বি 2}

boolean contains(String str){ 
    return Sets.newHashSet(YourEnum.values()).contains(str);
}                                  

@ Wightwulf1944 দ্বারা প্রস্তাবিত আপডেটটি সমাধানটিকে আরও দক্ষ করার জন্য সংযুক্ত করা হয়েছে।


4
এই প্রয়োগ কার্যকর নয়। এটি একটি নতুন সেট তৈরি করতে এনাম মানগুলির মাধ্যমে পুনরাবৃত্তি করে, তারপরে একটি স্ট্রিম তৈরি করে, যা ফলস্বরূপ সেটটির মাধ্যমে পুনরাবৃত্তি করে। এর অর্থ হ'ল প্রতিবার ফাংশনটি ডেকে একটি নতুন সেট এবং স্ট্রিম তৈরি করা হয়েছে এবং stream()একটি সেট ব্যবহার করার অর্থ আপনি অন্তর্নিহিত হ্যাশট্যাবিলের সুবিধা না নিয়ে সেটে প্রতিটি উপাদানকে পুনরুক্তি করছেন যা দ্রুত হবে। এটি উন্নত করতে, তৈরি সেটটিকে ক্যাশে করা এবং তার contains()পরিবর্তে এর পদ্ধতিটি ব্যবহার করা ভাল। যদি আপনার অবশ্যই একটি স্ট্রিম পাওয়া যায় তবে Arrays.stream()পরিবর্তে ব্যবহার করুন।
সুবারু তাশিরো

3

আমি মনে করি না সেখানে আছে তবে আপনি এরকম কিছু করতে পারেন:

enum choices {a1, a2, b1, b2};

public static boolean exists(choices choice) {
   for(choice aChoice : choices.values()) {
      if(aChoice == choice) {
         return true;
      }
   }
   return false;
}

সম্পাদনা:

রিচার্ডের সংস্করণটি দেখুন এটির জন্য এটি যথাযথ কারণ এটি স্ট্রিংস ব্যবহার করতে রূপান্তর না করে যতক্ষণ না রিচার্ডস এটি ব্যবহার করে তা কার্যকর হবে না।


তবে আমি মনে করি ওপি একটি স্ট্রিং পরীক্ষা করতে চায়?
রিচার্ড এইচ

হ্যাঁ, হা। এই পদ্ধতিটি কার্যকর হবে না কারণ আমরা ইতিমধ্যে জানি এনামগুলিতে পছন্দ রয়েছে। আপনার পরিবর্তনটি আরও সঠিক।
jluzwick

1
আপনি যদি এনামগুলিকে নিজেরাই (এবং তাদের নাম নয়) এর কিছু উপসেটে কাজ করতে চান তবে এনামসেটের দিকে নজর দেওয়া ভাল। ডাউনলোড.
oracle.com/javase/6/docs/api/java/util/EnumSet.html

সম্ভবত একটি মূ question় প্রশ্ন, তবে কেন ডাউনলোড . .values()oracle.com/javase/6/docs/api/java/lang/Enum.html নথিভুক্ত করা হয় না ?
বেনাম

এটি একটি দুর্দান্ত প্রশ্ন। আপনি ঠিক বলেছেন যে এটি নথিতে নেই এবং এটি এনাম উত্সেও নেই either আমি ধরে নিচ্ছি এটি এনামের একটি বাস্তবায়নের মধ্যে উপস্থিত রয়েছে বা কিছু জেএলএস বিধি রয়েছে যা এটির জন্য অনুমতি দেয়। এছাড়াও সমস্ত সংগ্রহ সামগ্রীতে এটি রয়েছে এবং সংগ্রহ হিসাবে এটি প্রয়োজনীয়ভাবে প্রয়োগ করা হয় নি যদিও এটি সংগ্রহ হিসাবে দেখা যায়।
jluzwick

3

জাভা স্ট্রিমগুলি এটি করার জন্য মার্জিত উপায় সরবরাহ করে

Stream.of(MyEnum.values()).anyMatch(v -> v.name().equals(strValue))

রিটার্নস: সত্য যদি স্ট্রিমের কোনও উপাদান সরবরাহিত মানের সাথে মেলে, অন্যথায় মিথ্যা


2

পাবলো এর উত্তরকে একটি মান ওফ () এর সাথে কেন সংযুক্ত করবেন না?

public enum Choices
{
    a1, a2, b1, b2;

    public static boolean contains(String s) {
        try {
            Choices.valueOf(s);
            return true;
        } catch (Exception e) {
            return false;
        }
}

দয়া করে না। অন্যান্য, পুরানো উত্তর যা আপনার সমতুল্য দেখুন: stackoverflow.com/a/4936872/103412
টর্স্টেন

1

এই পদ্ধতির কোনও পরীক্ষা করতে ব্যবহার করা যেতে পারে Enum, আপনি এটি একটি Utilsশ্রেণিতে যুক্ত করতে পারেন :

public static <T extends Enum<T>> boolean enumContains(Class<T> enumerator, String value)
{
    for (T c : enumerator.getEnumConstants()) {
        if (c.name().equals(value)) {
            return true;
        }
    }
    return false;
}

এটি এইভাবে ব্যবহার করুন:

boolean isContained = Utils.enumContains(choices.class, "value");

1

আমি এই বৈধতা জন্য পরবর্তী ক্লাস তৈরি

public class EnumUtils {

    public static boolean isPresent(Enum enumArray[], String name) {
        for (Enum element: enumArray ) {
            if(element.toString().equals(name))
                return true;
        }
        return false;
    }

}

ব্যবহারের উদাহরণ:

public ArrivalEnum findArrivalEnum(String name) {

    if (!EnumUtils.isPresent(ArrivalEnum.values(), name))
        throw new EnumConstantNotPresentException(ArrivalEnum.class,"Arrival value must be 'FROM_AIRPORT' or 'TO_AIRPORT' ");

    return ArrivalEnum.valueOf(name);
}

0

আপনি valueOf("a1")যদি স্ট্রিং দ্বারা সন্ধান করতে চান তবে আপনি ব্যবহার করতে পারেন


3
তবে এটি মার্জিত নয় .. মানটি উপস্থিত না থাকলে এটি একটি ব্যতিক্রম ছুঁড়ে দেয়। সুতরাং আপনার অবশ্যই অবশ্যই
চেষ্টাটি

মানটির অস্তিত্ব না থাকলে এটি একটি ব্যতিক্রম ছুঁড়ে ফেলবে
রিচার্ড এইচ

ম্যাচিং অবজেক্টের সন্ধানে এনাম পছন্দগুলির মাধ্যমে পুনরাবৃত্তি করার চেয়ে কম মার্জিত?
jprete

0

এটি একটি এনাম, এগুলি ধ্রুবক মান হয় তাই যদি এটির স্যুইচ স্টেটমেন্টে এটি ঠিক এর মতো কিছু করে থাকে:

case: val1
case: val2

এছাড়াও ধ্রুবক হিসাবে কী ঘোষণা করা হয় তা আপনার কেন জানতে হবে?


এই বিট কোডটি অন্য কোথাও স্যুইচ স্টেটমেন্টে নেই। আমি কেবল বলছিলাম যে এই ক্ষেত্রে, এনাম প্রয়োজনীয় কারণ অন্যরা পরামর্শ দিয়েছিল যে আমি পরিবর্তে একটি অ্যারেলিস্ট ব্যবহার করব।
জ্যারেড

@ জ্যারেড এটি এখন আরও বেশি
অর্থবোধ করে

@ জ্যারেড যাইহোক এটি ইতিমধ্যে কিছু নেই যেহেতু আপনি ইতিমধ্যে মানগুলি জানেন। মূলত list.contains () এর এনাম সমতুল্য হ'ল MyEnum.MyAwesomeValue
Woot4Moo

0

পেয়ারার সাথে এটি আরও সহজ:

boolean isPartOfMyEnum(String myString){

return Lists.newArrayList(MyEnum.values().toString()).contains(myString);

}

যেমন কিওরিয়া বলেছিল এটি কাজ করবে না। MyEnum.values()MyEnum উদাহরণগুলির অ্যারে প্রদান করে এবং MyEnum.value().toString()এই অ্যারে অবজেক্টের স্ট্রিং প্রতিনিধিত্ব প্রদান করে ("[LMyEnum; @ 15b94ed3" এর মতো স্ট্রিং)
ব্যবহারকারী 2137020

.name()পরিবর্তে আপনাকে কল করতে হবে .toString()(যদি না আপনি ডিফল্ট টু স্ট্রিং পদ্ধতিতে ওভাররাইড না করেন)। আরও তথ্যের জন্য এটি দেখুন: এনাম .ਨਾਮ () এবং .toString ()
গেই

0

এটি পূর্ববর্তী পদ্ধতিগুলি থেকে সমস্ত পদ্ধতির একত্রিত করে এবং তার সমতুল্য পারফরম্যান্স হওয়া উচিত। এটি যে কোনও এনামের জন্য ব্যবহার করা যেতে পারে, @ রিচার্ড এইচ থেকে "সম্পাদনা" সমাধানটি ইনলাইন করে এবং @bestss এর মতো অবৈধ মানগুলির জন্য ব্যতিক্রমগুলি ব্যবহার করে। একমাত্র ট্রেডঅফ হ'ল ক্লাসটি নির্দিষ্ট করা দরকার, তবে এটি এটিকে দ্বি-রেখায় পরিণত করে।

import java.util.EnumSet;

public class HelloWorld {

static enum Choices {a1, a2, b1, b2}

public static <E extends Enum<E>> boolean contains(Class<E> _enumClass, String value) {
    try {
        return EnumSet.allOf(_enumClass).contains(Enum.valueOf(_enumClass, value));    
    } catch (Exception e) {
        return false; 
    }
}

public static void main(String[] args) {
    for (String value : new String[] {"a1", "a3", null}) {
        System.out.println(contains(Choices.class, value));
    }
}

}



0

মান উপস্থিত রয়েছে কিনা তা যাচাইয়ের সমাধান এবং তার বিনিময়ে এনাম মান পান:

protected TradeType getEnumType(String tradeType) {
    if (tradeType != null) {
        if (EnumUtils.isValidEnum(TradeType.class, tradeType)) {
            return TradeType.valueOf(tradeType);
        }
    }
    return null;
}

0

এটি আমার জন্য কাজ করে:

Arrays.asList(YourEnum.values()).toString().contains("valueToCheck");

3
আপনার সংস্করণটি সত্য ফিরে আসবে এমনকি যদি আপনার এএননেমে "valueToCheckBlaBla" থাকে, কারণ "মানটিচেক" পুরো তালিকার স্ট্রিং উপস্থাপনায় উপস্থিত থাকবে।
নিকো

0

আপনি যদি জাভা 8 বা তার বেশি ব্যবহার করছেন তবে আপনি এটি করতে পারেন:

boolean isPresent(String testString){
      return Stream.of(Choices.values()).map(Enum::name).collect(Collectors.toSet()).contains(testString);
}


0

আপনি এটি একটি অন্তর্ভুক্ত পদ্ধতি হিসাবে তৈরি করতে পারেন:

enum choices {a1, a2, b1, b2};
public boolean contains(String value){
    try{
        EnumSet.allOf(choices.class).contains(Enum.valueOf(choices.class, value));
        return true;
    }catch (Exception e) {
        return false;
    }
}

অথবা আপনি এটি কেবল আপনার কোড ব্লক দিয়ে ব্যবহার করতে পারেন:

try{
    EnumSet.allOf(choices.class).contains(Enum.valueOf(choices.class, "a1"));
    //do something
}catch (Exception e) {
    //do something else
}

0

আপনি এছাড়াও ব্যবহার করতে পারেন: com.google.common.base.Enums

Enums.getIfPstream (varEnum.class, varToLookFor) একটি ptionচ্ছিক প্রদান করে

Enums.getIfPstream (fooEnum.class, myVariable) .আইসপ্রেসেন্ট ()? Enums.getIfPstream (fooEnum.class, myVariable) .get: fooEnum.OorseS


0

আমি শুধু লিখতে হবে,

Arrays.stream(Choice.values()).map(Enum::name).collect(Collectors.toList()).contains("a1");

এনাম # সমান কেবলমাত্র বস্তুর তুলনায় কাজ করে।


-1
public boolean contains(Choices value) {
   return EnumSet.allOf(Choices.class).contains(value);
}

যে কাজ করবে না। আপনি যখন স্ট্রিংটির জন্য এটি পরীক্ষা করছেন তখন সেটটিতে এনাম অবজেক্ট থাকে।
আইটেক

এখন উত্তরটি প্রশ্নের সাথে খাপ
খায়

-11

enumজাভা বেশ শক্তিশালী। আপনি সহজেই containsআপনার এনমগুলিতে একটি পদ্ধতি যুক্ত করতে পারেন (যেমন আপনি কোনও ক্লাসে কোনও পদ্ধতি যুক্ত করবেন):

enum choices {
  a1, a2, b1, b2;

  public boolean contains(String s)
  {
      if (s.equals("a1") || s.equals("a2") || s.equals("b1") || s.equals("b2")) 
         return true;
      return false;
  } 

};

তুমি বলতে চাচ্ছো s.equals("b1") || s.equals("b2")??
জিগার জোশী

3
এটি সম্ভবত এটি করার সর্বোত্তম উপায় হবেনা কারণ আপনি s.equals("xx")পরে যুক্ত প্রতিটি এনামের জন্য আপনাকে নতুন যুক্ত করতে হবে।
jluzwick

1
এবং একটি 1000+ enums হতে চলেছে।
জ্যারেড

20
যেসব লোকেরা এইরকম ভয়ঙ্কর সমাধানের পরামর্শ দেয় তারা কীভাবে 64K খ্যাতি অর্জন করবে? এই অবদানকারীদের উত্তরের উপর ভিত্তি করে সমস্ত
ক্রেইপি কোডটি স্লাগ করা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.