অ্যান্ড্রয়েডে এনাম ব্যবহার করা কি আমার কঠোরভাবে এড়ানো উচিত?


93

আমি Bundleনীচের মত একটি ইন্টারফেসে কীগুলির মতো সম্পর্কিত ধ্রুবকগুলির সেটকে সংজ্ঞায়িত করতাম:

public interface From{
    String LOGIN_SCREEN = "LoginSCreen";
    String NOTIFICATION = "Notification";
    String WIDGET = "widget";
}

এটি আমাকে গোষ্ঠী সম্পর্কিত স্থিরদের একসাথে সুন্দর উপায় সরবরাহ করে এবং স্ট্যাটিক আমদানি করে (সরঞ্জাম নয়) তাদের ব্যবহার করে। আমি জানি Androidফ্রেমওয়ার্ক এছাড়াও মত একই ভাবে ধ্রুবক ব্যবহার Toast.LENTH_LONG, View.GONE

তবে, আমি প্রায়শই অনুভব করি যে Java Enumsধ্রুবককে উপস্থাপন করার জন্য সরবরাহটি আরও ভাল এবং শক্তিশালী উপায় সরবরাহ করে।

কিন্তু একটি ব্যবহার করে performence ইস্যু enumsউপর Android?

কিছুটা গবেষণা করেই আমি বিভ্রান্তির মধ্যে পড়ে গেলাম। এই প্রশ্নটি থেকে "এনামগুলিকে এড়িয়ে চলুন যেখানে আপনার কেবল ইনটস দরকার" অ্যান্ড্রয়েডের পারফরম্যান্স টিপস থেকে মুছে ফেলা হয়েছে? এটি পরিষ্কার যে Googleএটি "এনামগুলি এড়িয়ে চলুন" তার কার্যকারিতা টিপস থেকে সরিয়ে নিয়েছে, তবে এর থেকে অফিসিয়াল প্রশিক্ষণ ডকস স্মৃতিতে ওভারহেড বিভাগ সম্পর্কে সচেতন হন এটি পরিষ্কারভাবে বলেছে: "এনামস স্থির ধ্রুবকের চেয়ে প্রায়শই দ্বিগুণেরও বেশি মেমরির প্রয়োজন হয়। আপনার অ্যান্ড্রয়েডে এনাম ব্যবহার করা কঠোরভাবে এড়ানো উচিত " " এটি এখনও ভাল আছে? ( Java1.6 এর পরে সংস্করণগুলিতে বলুন )

আরও একটি ইস্যু যে আমি পালন পাঠানোর জন্য enumsজুড়ে intentsব্যবহার Bundleআমি তাদের serializing দ্বারা পাঠাতে (অর্থাত putSerializable(), আমি একটি ব্যয়বহুল অপারেশন আদিম তুলনায় মনে putString()পদ্ধতি, eventhough enumsবিনামূল্যে জন্য এটি উপলব্ধ করা)।

কেউ দয়া করে এটি ব্যাখ্যা করতে পারেন যে কোনটি এর মধ্যে উপস্থাপনের সবচেয়ে ভাল উপায় Android? আমি কঠোরভাবে ব্যবহার এড়িয়ে চলা উচিত enumsউপর Android?


4
আপনার উপলব্ধ সরঞ্জামগুলি ব্যবহার করা উচিত। আসলে, কোনও ক্রিয়াকলাপ বা টুকরোটি প্রচুর স্মৃতি এবং সিপিইউ ব্যবহার গ্রহণ করে তবে এগুলি ব্যবহার বন্ধ করার কোনও কারণ নেই। আপনার যদি কেবল এটির প্রয়োজন হয় তবে একটি স্ট্যাটিক ইনট ব্যবহার করুন এবং আপনার যখন প্রয়োজন হয় তখন এনামগুলি ব্যবহার করুন।
প্যাট্রিক

11
আমি রাজী. এটি অকাল অপটিমাইজেশনের মতো গন্ধযুক্ত। আপনার পারফরম্যান্স এবং / অথবা মেমরির সমস্যা না থাকলে এবং প্রোফাইলের মাধ্যমে প্রমাণ করতে পারবেন না যে এনামগুলিই এর কারণ use
গ্রেইয়ার্ডেডিক

4
এটি বিশ্বাস করা হত যে এনামগুলি একটি ত্রি-পরীক্ষামূলক পারফরম্যান্স জরিমানা ব্যয় করেছিল, তবে সাম্প্রতিকতম মাপের মানদণ্ডগুলি পরিবর্তে ধ্রুবক ব্যবহারে কোনও লাভ দেখায় না। দেখুন stackoverflow.com/questions/24491160/... সেইসাথে stackoverflow.com/questions/5143256/...
বেঞ্জামিন সার্জেন্ট

4
কোনও বান্ডলে এনামকে সিরিয়ালকরণের পারফরম্যান্স পেনাল্টি এড়ানোর জন্য, আপনি Enum.ordinal()পরিবর্তে এটি ব্যবহার করে ইন্ট হিসাবে পাস করতে পারেন ।
ব্লেডকডার

4
পরিশেষে
এনুম-এর

উত্তর:


116

আপনার enumবৈশিষ্ট্যগুলির প্রয়োজন হলে ব্যবহার করুন । এটিকে কঠোরভাবে এড়িয়ে চলবেন না

জাভা এনাম আরও শক্তিশালী, তবে আপনার যদি এর বৈশিষ্ট্যগুলির প্রয়োজন না হয়, ধ্রুবক ব্যবহার করেন তবে তারা কম জায়গা দখল করে এবং এগুলি নিজেই আদিম হতে পারে।

যখন এনাম ব্যবহার করবেন:

  • টাইপ চেকিং - আপনি কেবল তালিকাভুক্ত মানগুলি গ্রহণ করতে পারেন এবং সেগুলি অবিচ্ছিন্ন নয় (আমি এখানে যা ধারাবাহিক বলি তার নীচে দেখুন )
  • পদ্ধতি ওভারলোডিং - প্রতিটি এনাম ধ্রুবকের একটি পদ্ধতির নিজস্ব প্রয়োগ রয়েছে

    public enum UnitConverter{
        METERS{
            @Override
            public double toMiles(final double meters){
                return meters * 0.00062137D;
            }
    
            @Override
            public double toMeters(final double meters){
                return meters;
            }
        },
        MILES{
            @Override
            public double toMiles(final double miles){
                return miles;
            }
    
            @Override
            public double toMeters(final double miles){
                return miles / 0.00062137D;
            }
        };
    
        public abstract double toMiles(double unit);
        public abstract double toMeters(double unit);
    }
    
  • আরও ডেটা - আপনার এক ধ্রুবতে একাধিক তথ্য রয়েছে যা একটি ভেরিয়েবলে রাখা যায় না

  • জটিল ডেটা - ডেটা পরিচালনা করার জন্য আপনার ধ্রুবক পদ্ধতিগুলি

যখন এনাম ব্যবহার করবেন না :

  • আপনি এক ধরণের সমস্ত মান গ্রহণ করতে পারেন, এবং আপনার ধ্রুবকগুলিতে কেবল এটি সর্বাধিক ব্যবহৃত হয়
  • আপনি অবিচ্ছিন্ন ডেটা গ্রহণ করতে পারেন

    public class Month{
        public static final int JANUARY = 1;
        public static final int FEBRUARY = 2;
        public static final int MARCH = 3;
        ...
    
        public static String getName(final int month){
            if(month <= 0 || month > 12){
                throw new IllegalArgumentException("Invalid month number: " + month);
            }
    
            ...
        }
    }
    
  • নামের জন্য (যেমন আপনার উদাহরণ হিসাবে)
  • অন্য সব কিছুর জন্য যা সত্যই এনামের দরকার নেই

এনামরা আরও জায়গা দখল করে

  • একটি এনাম ধ্রুবক একটি একক রেফারেন্স 4 বাইট দখল করে
  • প্রতিটি এনাম ধ্রুবক এমন স্থান দখল করে যা তার ক্ষেত্রগুলির আকারের যোগফলের 8 বাইট + ওভারহেডের সাথে প্রান্তিক হয়
  • এনাম শ্রেণি নিজেই কিছু স্থান দখল করে

ধ্রুবকরা কম জায়গা দখল করে

  • ধ্রুবকের কোনও রেফারেন্স থাকে না সুতরাং এটি খাঁটি ডেটা (এমনকি এটি যদি একটি রেফারেন্স হয় তবে এনাম উদাহরণটি অন্য রেফারেন্সের জন্য একটি রেফারেন্স হতে পারে)
  • একটি বিদ্যমান শ্রেণিতে ধ্রুবকগুলি যুক্ত করা যেতে পারে - অন্য ক্লাস যুক্ত করার প্রয়োজন নেই
  • ধ্রুবকগুলি অন্তর্ভুক্ত হতে পারে; এটি বর্ধিত সংকলন-সময় বৈশিষ্ট্যগুলি নিয়ে আসে (যেমন নাল চেকিং, ডেড কোড সন্ধান করা ইত্যাদি)

4
আপনি ইনট কনস্ট্যান্টের জন্য টাইপ চেকিংয়ের অনুকরণ করতে @ আইডিডিফ টীকাটি ব্যবহার করতে পারেন। এটি জাভা এনামসের পক্ষে আরও একটি যুক্তি।
ব্লেডকডার

4
@ ব্ল্যাড কোডার নো, আপনার ধ্রুবকের কোনও রেফারেন্স দরকার নেই
কামিল জারোস

4
এছাড়াও, এটি লক্ষ্য করা ভাল যে এনামগুলি ব্যবহার করে প্রতিবিম্বের ব্যবহারকে উত্সাহ দেয়। এবং এটি পরিচিত যে প্রতিবিম্বের ব্যবহার অ্যান্ড্রয়েডের জন্য একটি বিশাল পারফরম্যান্স হিট। এখানে দেখুন: blog.nimbledroid.com/2016/02/23/slow-Android-reflection.html
w3bshark

4
@ w3bshark এনামগুলি কীভাবে প্রতিবিম্বের ব্যবহারকে প্রচার করে?
কেভিন ক্রামউইদে

4
আরেকটি বিষয় মনে রাখবেন তা হ'ল স্ট্যান্ডার্ড খালি "হ্যালো, ওয়ার্ল্ড!" প্রকল্পে 4,000 এরও বেশি ক্লাস এবং 700,000 অবজেক্ট রয়েছে। আপনার যদি হাজার হাজার কনস্ট্যান্টের সাথে হাস্যকরভাবে বিশাল এনাম হয়, আপনি নিশ্চিত হতে পারেন যে অ্যান্ড্রয়েড ফ্রেমওয়ার্কটি নিজেই ফুলে যাওয়ার পরে পারফরম্যান্সের প্রভাব উপেক্ষিত হবে।
কেভিন ক্রামউইদে

58

যদি এনামগুলিতে কেবল মান থাকে তবে আপনার এখানে বর্ণিত ইনটডিফ / স্ট্রিংডেফ ব্যবহার করার চেষ্টা করা উচিত:

https://developer.android.com/studio/write/annotations.html#enum-annotations

উদাহরণ: এর পরিবর্তে:

enum NavigationMode {NAVIGATION_MODE_STANDARD, NAVIGATION_MODE_LIST, NAVIGATION_MODE_TABS} 

তুমি ব্যাবহার কর:

@IntDef({NAVIGATION_MODE_STANDARD, NAVIGATION_MODE_LIST, NAVIGATION_MODE_TABS})
@Retention(RetentionPolicy.SOURCE)
public @interface NavigationMode {}

public static final int NAVIGATION_MODE_STANDARD = 0;
public static final int NAVIGATION_MODE_LIST = 1;
public static final int NAVIGATION_MODE_TABS = 2;

এবং ফাংশনটিতে এটি প্যারামিটার হিসাবে / ফেরত মান হিসাবে ব্যবহার করুন:

@NavigationMode
public abstract int getNavigationMode();

public abstract void setNavigationMode(@NavigationMode int mode);

এনাম জটিল হলে এনুম ব্যবহার করুন। এটা যে খারাপ না.

এনামগুলি বনাম ধ্রুবক মানের তুলনা করতে আপনার এখানে পড়তে হবে:

http://hsc.com/Blog/Best- অনুশীলন- For- স্মৃতি- অপ্টিমাইজেশন- অন-Android-1

তাদের উদাহরণ 2 মান সহ একটি এনামের। ধ্রুবক পূর্ণসংখ্যার ব্যবহার করা হয় যখন 128 বাইটের তুলনায় ডেক্স ফাইলে এটি 1112 বাইট নেয়। এনামগুলি বাস্তব শ্রেণি যেমন, এটি সি / সি ++ তে কীভাবে কাজ করে তার বিপরীতে যেমন বোঝা যায়।


যদিও আমি অন্যান্য উত্তরগুলিকে এনামগুলির পক্ষে / কনস সরবরাহ করে তাদের প্রশংসা করি, তবে এই উত্তরটি অবশ্যই গ্রহণযোগ্য উত্তর হওয়া উচিত কারণ এটি অ্যান্ড্রয়েডের জন্য বিশেষত সর্বোত্তম সমাধান সরবরাহ করে। সমর্থন টীকাগুলি হ'ল উপায়। অ্যান্ড্রয়েড বিকাশকারীদের হিসাবে আমাদের "ভেবে দেখা উচিত, যদি না আমি এনাম ব্যবহারের দৃ strong় কারণ না পাই তবে আমি মন্তব্যগুলির সাথে ধ্রুবক ব্যবহার করব", অন্য উত্তরগুলির ভাবনার উপায়ের চেয়ে "যদি না পরে আমি স্মৃতি / সম্পাদন সম্পর্কে উদ্বিগ্ন হতে শুরু করি, আমি এনাম ব্যবহার করতে পারি "। পরবর্তীতে পারফরম্যান্স সমস্যা থেকে নিজেকে এখনই থামান!
w3bshark

4
@ w3bshark যদি আপনার পারফরম্যান্সে সমস্যা হয় তবে এনামগুলি প্রথম সমাধান করার সম্ভাবনা নেই যা আপনি সেগুলি সমাধান করার কথা ভাবছিলেন। টীকাগুলির নিজস্ব ট্রেড-অফ রয়েছে: তাদের সংকলক সমর্থন নেই, তাদের নিজস্ব ক্ষেত্র এবং পদ্ধতি থাকতে পারে না, তারা লেখার জন্য ক্লান্তিকর, আপনি সহজেই কোনও এনটেট করতে ভুলে যেতে পারেন ইত্যাদি। এগুলি সামগ্রিকভাবে আরও ভাল সমাধান নয়, যখন আপনার প্রয়োজন হবে তখন তারা হ্যাপ স্পেস সংরক্ষণ করার জন্য কেবল সেখানে রয়েছে।
ম্যালকম 15

4
@ অ্যান্ড্রয়েড ডেভেলপার আপনি এনাম ঘোষণায় সংজ্ঞায়িত না থাকা ধ্রুবক পার করে ভুল করতে পারবেন না। এই কোডটি কখনই সংকলন করবে না। আপনি যদি কোনও IntDefটিকা দিয়ে কোনও ভুল ধ্রুবকটি পাস করেন তবে তা হয়ে যাবে। ঘড়ি হিসাবে, আমি মনে করি এটি খুব পরিষ্কার। কোন ডিভাইসে আরও সিপিইউ শক্তি, র‌্যাম এবং ব্যাটারি রয়েছে: একটি ফোন বা একটি ঘড়ি? আর কোনটির কারণে পারফরম্যান্সের জন্য আরও অনুকূলিতকরণের জন্য সফ্টওয়্যার প্রয়োজন?
ম্যালকম

4
@ অ্যান্ড্রয়েড ডেভেলপার ঠিক আছে, আপনি যদি কঠোর পরিভাষায় জেদ করেন তবে ভুল করে আমার বোঝা গেল ত্রুটিগুলি যা সংকলন-সময় ত্রুটিগুলি নয় (রান-টাইম বা প্রোগ্রাম-লজিক ত্রুটি)। আপনি কি আমাকে ট্রোল করছেন বা সত্যই তাদের এবং পার্থক্যটির সাথে পার্থক্য পাবেন না সংকলন-সময় ত্রুটিগুলি? এটি একটি আলোচিত বিষয়, ওয়েবে এটি দেখুন। ঘড়ির বিষয়ে, অ্যান্ড্রয়েডে আরও বেশি ডিভাইস অন্তর্ভুক্ত রয়েছে তবে সীমাবদ্ধতমগুলি হ'ল সর্বনিম্ন সাধারণ ডিনোমিনেটর।
ম্যালকম

4
@ অ্যান্ড্রয়েড ডেভেলপার আমি ইতিমধ্যে এই দুটি বিবৃতিতে ইতিমধ্যে প্রতিক্রিয়া জানিয়েছি, তাদের আরও একবার পুনরাবৃত্তি করলে আমি যা বলেছিলাম তা অকার্যকর হয় না।
ম্যালকম

12

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

https://www.guardsquare.com/en/proguard/manual/optimizations

ক্লাস / আনবক্সিং / এনাম

যখনই সম্ভব পূর্ণসংখ্যার ধ্রুবকগুলিতে এনাম প্রকারগুলি সহজ করে।

অতএব, যদি আপনার কিছু স্বতন্ত্র মান থাকে এবং কিছু পদ্ধতিতে কেবল এই মানগুলি গ্রহণ করার অনুমতি দেয় এবং একই ধরণের অন্যদের না করে, তবে আমি ব্যবহার করব Enum, কারণ প্রোগার্ড আমার জন্য কোডটি অনুকূলকরণের এই ম্যানুয়াল কাজটি করবে।

এবং এখানে জেক ওয়ার্টনের এনাম ব্যবহার সম্পর্কে একটি ভাল পোস্ট রয়েছে, এটি একবার দেখুন।

গ্রন্থাগার বিকাশকারী হিসাবে, আমি এই ক্ষুদ্রতর অপ্টিমাইজেশানগুলি সনাক্ত করি যা আমাদের গ্রহণযোগ্য অ্যাপের আকার, মেমরি এবং সম্ভাব্য পারফরম্যান্সের উপর খুব কম প্রভাব ফেলতে চাই বলেই করা উচিত। তবে এটি উপলব্ধি করা জরুরী যে [...] আপনার সর্বজনীন API বনাম পূর্ণসংখ্যার মানগুলিতে একটি এনাম লাগানো উপযুক্ত যেখানে উপযুক্ত। অবহিত সিদ্ধান্ত নিতে পার্থক্য জেনে রাখা গুরুত্বপূর্ণ কি


11

অ্যান্ড্রয়েডে এনাম ব্যবহার করা কি আমার কঠোরভাবে এড়ানো উচিত?

না, " কঠোরভাবে " এর অর্থ তারা এত খারাপ, এগুলি ব্যবহার করা উচিত নয়। সম্ভবত এনামগুলি (ইউআই থ্রেডে একটানা) অনেকগুলি (হাজার বা লক্ষ লক্ষ) ক্রিয়াকলাপের মতো চূড়ান্ত পরিস্থিতিতে একটি পারফরম্যান্সের সমস্যা দেখা দিতে পারে । নেটওয়ার্ক I / O ক্রিয়াকলাপগুলি আরও সাধারণ যেগুলি পটভূমির থ্রেডে কঠোরভাবে হওয়া উচিত । Enums সবচেয়ে সাধারণ ব্যবহারের সম্ভবত প্রকার চেক কিছু হয় - একটি বস্তুর কিনা এই বা যে যা দ্রুত আপনি enums একটি একক তুলনা এবং পূর্ণসংখ্যার একটি তুলনামূলক মধ্যে একটি পার্থক্য লক্ষ্য করতে সক্ষম নাও হতে হবে।

অ্যান্ড্রয়েডে একই উপস্থাপনের সবচেয়ে ভাল উপায় কোনটি দয়া করে তা স্পষ্ট করে বলতে পারেন?

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


4
আপনি কেন পরে অনুকূলিত করবেন, যখন সমর্থন টীকাগুলির সাথে ধ্রুবকগুলি ব্যবহার করা ঠিক এখন সহজ এবং এখনই অনুকূলিত করা যায়? @ অ্যান্ড্রয়েড_ডিভোপারের উত্তরটি এখানে দেখুন।
w3bshark

11

অ্যান্ড্রয়েড পি দিয়ে, গুগলের এনামগুলি ব্যবহারে কোনও বাধা / আপত্তি নেই

ডকুমেন্টেশনটি যেখানে সাবধান হওয়ার আগে সুপারিশ করা হয়েছিল সেখানে পরিবর্তন হয়েছে তবে এখন এটি উল্লেখ করা হয়নি। https://developer.android.com/references/java/lang/Enum


4
এটি ছাড়াও অন্য কোনও প্রমাণ রয়েছে: আমি @ জেকওয়ার্টন বিবৃতিটি সম্পর্কে এটি পেয়েছি: টুইটার . com/jakewharton/status/1067790191237181441 । যে কেউ বাইটকোড চেক করতে পারবেন।
সোশিয়াল

4

দুটি ঘটনা।

1, এনাম জাভা-র অন্যতম শক্তিশালী বৈশিষ্ট্য।

2, অ্যান্ড্রয়েড ফোনে সাধারণত প্রচুর স্মৃতি থাকে।

সুতরাং আমার উত্তর নেই। আমি Android এ এনাম ব্যবহার করব।


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

4
আমি আপনার সাথে একমত যে আমাদের সেরা অনুশীলনটি অনুসরণ করা উচিত, তবে সর্বোত্তম অনুশীলনের মানে সর্বদা কমপক্ষে স্মৃতি ব্যবহার করা হয় না। কোড পরিষ্কার রাখা, বোঝার পক্ষে সহজ বেশ কয়েকটি কে মেমরি সংরক্ষণের চেয়ে বেশি গুরুত্বপূর্ণ। আপনার একটি ভারসাম্য খুঁজে পাওয়া দরকার।
কাই ওয়াং

4
আমি আপনার সাথে একমত যে আমাদের একটি ভারসাম্য খুঁজে পাওয়া দরকার তবে টাইপডেফ ব্যবহার করা আমাদের কোডটিকে খারাপ বা কম রক্ষণাবেক্ষণের মতো দেখায় না। আমি এটি এখন এক বছরেরও বেশি সময় ধরে ব্যবহার করছি এবং কখনই অনুভব করিনি যে আমার কোডটি বোঝা সহজ নয়, আমার কোনও সমবয়সীও কখনও অভিযোগ করেননি যে এনামগুলির তুলনায় টাইপডেফগুলি বোঝা শক্ত। আমার পরামর্শ হ'ল এনামগুলি কেবল তখনই ব্যবহার করুন যখন আপনার কাছে অন্য কোনও বিকল্প নেই তবে আপনি যদি পারেন তবে তা এড়িয়ে যান।
বরুণড্রয়েড

2

আমি যুক্ত করতে চাই, আপনি যখন কোনও তালিকা <> বা মানচিত্র <> ঘোষণা করেন তখন আপনি @ টীকাগুলি ব্যবহার করতে পারবেন না যেখানে চাবি বা মান আপনার এনটোটেশন ইন্টারফেসগুলির মধ্যে একটি। আপনি ত্রুটি পেয়েছেন "টীকাগুলি এখানে অনুমোদিত নয়"।

enum Values { One, Two, Three }
Map<String, Values> myMap;    // This works

// ... but ...
public static final int ONE = 1;
public static final int TWO = 2;
public static final int THREE = 3;

@Retention(RetentionPolicy.SOURCE)
@IntDef({ONE, TWO, THREE})
public @interface Values {}

Map<String, @Values Integer> myMap;    // *** ERROR ***

সুতরাং আপনার যখন এটি কোনও তালিকা / মানচিত্রে প্যাক করার দরকার আছে তখন এনাম ব্যবহার করুন, সেগুলি যুক্ত করা যেতে পারে তবে @ এনটোটেড ইন্ট / স্ট্রিং গ্রুপগুলি এটি করতে পারে না।

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