এনুমের মানগুলি () পদ্ধতির জন্য ডকুমেন্টেশন কোথায়?


172

আমি একটি এনাম হিসাবে ঘোষণা করি:

enum Sex {MALE,FEMALE};

এবং তারপরে, নীচে প্রদর্শিত হিসাবে পুনরাবৃত্তি এনাম:

for(Sex v : Sex.values()){
    System.out.println(" values :"+ v);
}

আমি জাভা এপিআই পরীক্ষা করেছি কিন্তু মানগুলি () পদ্ধতিটি খুঁজে পাচ্ছি না? আমি জানতে আগ্রহী যে এই পদ্ধতিটি কোথা থেকে এসেছে?

এপিআই লিঙ্ক: https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html

উত্তর:


178

এই পদ্ধতিটি জাভাডকে দেখতে পাচ্ছেন না কারণ এটি সংকলক যুক্ত করেছে।

তিনটি জায়গায় নথিভুক্ত:

সংকলক স্বয়ংক্রিয়ভাবে কিছু বিশেষ পদ্ধতি যুক্ত করে যখন এটি এনাম তৈরি করে। উদাহরণস্বরূপ, তাদের কাছে একটি স্থিত মানের মান পদ্ধতি রয়েছে যা এনামের সমস্ত মানগুলিকে তারা যেভাবে ঘোষিত হয় তার সাথে একটি অ্যারে প্রদান করে। এই পদ্ধতিটি সাধারণত এনাম টাইপের মানগুলির সাথে পুনরাবৃত্তি করতে ফর-কনস্ট্রাক্টের সাথে একত্রে ব্যবহৃত হয়।

  • Enum.valueOfশ্রেণি
    (বিশেষ valuesবর্ণিত valueOfপদ্ধতিটি পদ্ধতির বর্ণনায় উল্লেখ করা হয়েছে )

একটি এনাম ধরণের সমস্ত ধ্রুবকগুলি এই ধরণের অন্তর্নিহিত পাবলিক স্ট্যাটিক টি [] মানগুলি) পদ্ধতিতে কল করে পাওয়া যায়।

valuesফাংশন কেবল শুমার সব মান তার তালিকা দেখাবে।


6
এর কোন নির্দিষ্ট কারণ? কেন এটি এপিআই-র অংশ নয়?
রাই.স্কুমার

10
কারণ কেবল মানক প্রক্রিয়া (এনাম ব্যতীত) ব্যবহার করা আপনার পক্ষে এই স্থির পদ্ধতি থাকতে পারে না। এই এনামগুলিকে অনুমতি দেওয়ার জন্য জাভা স্পেসিফিকেশনটি প্রসারিত করতে হয়েছিল, এজন্য এটি সংকলক দ্বারা যুক্ত করতে হবে।
সাগ্ররেট

4
জাভা 7 এর পর থেকে এটি java.lang.Enum এর জাভাদকে যুক্ত করা হয়েছে, স্থির মূল্যবানঅথ পদ্ধতির বর্ণনায়।
ক্যাটউইজলে

3
"মানগুলি ()" কল করা কি নতুন অ্যারে তৈরি করে, বা এটি আবার একই ব্যবহার করে?
অ্যান্ড্রয়েড বিকাশকারী 8

3
@ অ্যান্ড্রয়েড ডেভেলপার এটি একটি নতুন অ্যারে ফেরত দেয় (অন্যথায় আপনি এনামের সাথে জগাখিচুড়ি করতে পারেন)
ডেনিস সাগুরেট

35

পদ্ধতিটি সুস্পষ্টভাবে সংজ্ঞায়িত করা হয়েছে (যেমন সংকলক দ্বারা উত্পাদিত)।

জেএলএস থেকে :

তদতিরিক্ত, যদি Eকোনও enumপ্রকারের নাম হয় তবে সেই ধরণের নিম্নোক্ত স্পষ্টভাবে ঘোষিত staticপদ্ধতি রয়েছে:

/**
* Returns an array containing the constants of this enum 
* type, in the order they're declared.  This method may be
* used to iterate over the constants as follows:
*
*    for(E c : E.values())
*        System.out.println(c);
*
* @return an array containing the constants of this enum 
* type, in the order they're declared
*/
public static E[] values();

/**
* Returns the enum constant of this type with the specified
* name.
* The string must match exactly an identifier used to declare
* an enum constant in this type.  (Extraneous whitespace 
* characters are not permitted.)
* 
* @return the enum constant with the specified name
* @throws IllegalArgumentException if this enum type has no
* constant with the specified name
*/
public static E valueOf(String name);

Added by the compilerএর অর্থ এই কোডটির জন্য জাভা নেই বা সংকলক কোডটি উত্পন্ন করেছে? আমি এনুমের ওপেনজেডিকে উত্স কোডটি পরীক্ষা করে দেখেছি এবং নেইvalues()
মার্কো সুল্লা

12

এই চালান

    for (Method m : sex.class.getDeclaredMethods()) {
        System.out.println(m);
    }

তুমি দেখবে

public static test.Sex test.Sex.valueOf(java.lang.String)
public static test.Sex[] test.Sex.values()

এই "লিঙ্গ" শ্রেণীর সমস্ত পাবলিক পদ্ধতি রয়েছে। তারা সোর্স কোডে নেই, জাভ্যাক.এক্সই তাদের যুক্ত করেছে

মন্তব্য:

  1. যৌনতা কখনই শ্রেণীর নাম হিসাবে ব্যবহার করবেন না, আপনার কোড পড়া খুব কঠিন, আমরা জাভাতে সেক্স ব্যবহার করি

  2. এই জাতীয় জাভা ধাঁধার মুখোমুখি হওয়ার সময়, আমি বাইকোড ডিকম্পিলার সরঞ্জামটি ব্যবহার করার পরামর্শ দিই (আমি অ্যান্ড্রে লসকুতভের বাইটকোড আউটলাইন একলিস্প প্লাগইন ব্যবহার করি)। এটি ক্লাসের মধ্যে কী রয়েছে তা সমস্ত দেখায়

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