enum.values ​​() - প্রত্যাবর্তিত এনামগুলিকে ডিটারমিনিস্টিকের একটি আদেশ


105

আমার একটি এনাম আছে SOME_ENUM:

public enum SOME_ENUM {
  EN_ONE,
  EN_TWO,
  EN_THREE;
}

হবে SOME_ENUM.values()সবসময় enum ঘোষণা ক্রমানুসারে enums ফিরে EN_ONE, EN_TWO, EN_THREE? এটি কোনও নিয়ম বা পরবর্তী জেডিকে রিলিজগুলিতে পরিবর্তন না হওয়ার গ্যারান্টি নেই?


1
আমি একটি তালিকা পূরণের জন্য আমার এনামের উপর পুনরাবৃত্তি করি যা কোডটির অন্য জায়গাগুলির চেয়ে আমি এই এনামটির উপরে পুনরাবৃত্তি পড়ি।
স্কারাব

11
@ মিচওয়েট একই কারণে আপনি একটি তালিকা সংরক্ষণের আদেশের উপর নির্ভর করবেন: কারণ জেডিকে একটি সরঞ্জাম যা আপনাকে নির্দিষ্ট গ্যারান্টি দেয় এবং এই গ্যারান্টির উপর নির্ভর করা আপনাকে আরও সংক্ষিপ্ত এবং আরও ভাল কোড লিখতে সহায়তা করে। স্বীকার করা হয়েছে, প্রশ্ন "এটি কি পরিবর্তন না হওয়ার গ্যারান্টিযুক্ত?" উত্তর দেওয়া অসম্ভব, আপনি অবশ্যই তার উপর নির্ভর করতে পারবেন না, এর কোনও নিশ্চয়তা নেই।
ফ্লেচ

উত্তর:


144

জাভা ভাষার স্পেসিফিকেশন এই স্পষ্ট ভাষা ব্যবহার করে:

@ এই এনাম টাইপের ধ্রুবকগুলি সমন্বিত একটি অ্যারে পুনরুদ্ধার করুন, তাদের ক্রম হিসাবে ঘোষণা করা হয়েছে [উত্স]

সুতরাং, হ্যাঁ, তারা ঘোষণার ক্রমে ফিরে আসবে। এটি লক্ষ করার মতো যে কেউ যদি ক্লাস পরিবর্তন করে তবে সময়ের সাথে সাথে অর্ডার পরিবর্তিত হতে পারে আপনি কীভাবে এটি ব্যবহার করেন সে সম্পর্কে খুব সতর্ক হন।


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

1
যে স্পেসিফিকেশন জন্য উত্স লিঙ্ক?
ড্যান গ্রাহন


16

হ্যাঁ, এই ক্রমে তাদের ফিরিয়ে দেওয়া গ্যারান্টিযুক্ত।

তবে আপনার উপর এবং ordinal()মানের উপর নির্ভর করা এড়ানো উচিত , কারণ এটি নতুন আইটেম সন্নিবেশ করার পরে পরিবর্তন হতে পারে।


1ষি পরামর্শের জন্য +1। অর্ডিনাল () বিষয়ে, কার্যকর জাভা এনাম টাইপের সাথে একটি সদস্য ক্ষেত্র যুক্ত করার পরামর্শ দেয়।
IDE

9

আপনার মানগুলি ঘোষিত ক্রম দ্বারা এটি নির্ধারিত হয় However তবে, কোনও নিশ্চয়তা নেই যে আপনি (বা অন্য কেউ) ভবিষ্যতে মানগুলি পুনরায় অর্ডার / সন্নিবেশ / সরাবেন না । সুতরাং আপনি আদেশ উপর নির্ভর করা উচিত নয়।

কার্যকর জাভা 2 য়। সংস্করণটি তার আইটেমটি একটি ঘনিষ্ঠভাবে সম্পর্কিত বিষয়ে উত্সর্গ করেছে: অর্ডিনালের পরিবর্তে উদাহরণ ক্ষেত্রগুলি ব্যবহার করুন :

কোনও এনামের সাথে জড়িত কোনও মান এর অর্ডিনাল থেকে কখনই অর্জন করবেন না; পরিবর্তে এটি একটি ক্ষেত্রে ক্ষেত্রে সংরক্ষণ করুন।


3
"কোনও নিশ্চয়তা নেই যে ভবিষ্যতে কেউ মানগুলি পুনরায় অর্ডার করবে না" - তবে ঠিক এই কারণেই আমি আদেশটির উপর নির্ভর করতে চাই :-)! আমি ভবিষ্যতে আইটেমগুলি পুনরায় অর্ডার করতে সক্ষম হতে চাই এবং এর মাধ্যমে আমার প্রোগ্রামের আচরণ পরিবর্তন করতে পারি। ব্লচ অর্ডিনালের উপর নির্ভর না করার বিষয়ে সঠিক এবং যদি জিজ্ঞাসকের উদাহরণে সত্যই EN_TWO এর মতো এনাম অন্তর্ভুক্ত থাকে তবে তিনি অর্ডিনালের উপর নির্ভর করছেন এবং এটি করা উচিত নয়। তবে অর্ডারের উপর নির্ভর করা পুরোপুরি ঠিক আছে। আসলে, যেমন অর্ডার নিশ্চিত করা হয়, বিশেষত অর্ডারের জন্য একটি ক্ষেত্র তৈরি করা নিরর্থক কোড লিখতে হবে, কার্যকর জাভা এর মতো জিনিস বই আপনাকে না করতে বলে দেয়।
ফ্লেচ

@ ফ্লেচ, দুঃখিত, আমি আপনাকে বেশ অনুসরণ করি না। আমার কাছে এটি মনে হচ্ছে আপনি enumকোনও উদ্দেশ্যে এটি ব্যবহার করার চেষ্টা করছেন যা এটির উদ্দেশ্যে নয় intended
পিয়েটার টার্ক

আসুন আমরা আপনার কাছে "প্ল্যানেট" এনুম আছে বলে দিন। আপনার ইউআইতে আপনি গ্রহগুলিকে সূর্য থেকে দূরত্ব অনুসারে তালিকাবদ্ধ করতে চান। আপনি কীভাবে সেরা এহাই করতে পারেন? আমি এনাম শ্রেণীর অভ্যন্তরে গ্রহের ধ্রুবককে সঠিক ক্রমে অর্ডার করব এবং তারপরে ইউআইতে কেবল এনামকে অঙ্কিত করব। যেহেতু আদেশ নির্ভরযোগ্য তাই এটি কাজ করবে। এটাই আমি সেই ধরণের কথা বলছি। যদি একদিন পৃথিবী মঙ্গলগ্রহের চেয়ে সূর্যের কাছাকাছি চলে যায় তবে অবশ্যই এই মুহুর্তে আপনার উষ্ণ মনে প্রথম জিনিসটি আপনার কোড বজায় রাখবে! সুতরাং আপনি আপনার প্ল্যানেট ক্লাসে যান এবং MARS এর আগে প্রথম দিকে যান।
ফ্লেচ

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

1
হাহাহা আরম্ম হ্যাঁ যাইহোক যাইহোক এটি সমস্ত ষড়যন্ত্র, মঙ্গল নেই। প্রথমদিকে আমি শনি ব্যবহার করতে যাচ্ছিলাম তবে কোন গ্রহটি নিকটে রয়েছে তা মনে করতে পারছিলাম না, তবে মঙ্গল গ্রহের পরিকল্পনাটি ব্যাকফায়ার করেছে বলে মনে হচ্ছে :-)। যাইহোক ... এক্ষেত্রে একটি তুলনাকারী ভাল হবে তবে স্পষ্টতই আরও কোডের প্রয়োজনের খারাপ দিক রয়েছে। আমি মনে করি আপনি যদি সোর্স কোড অর্ডারের উপর নির্ভর করে থাকেন তবে ক্লাসের মন্তব্যে এটি নথিভুক্ত করা ভাল জিনিস হবে। আপনার সহকর্মী এমনকি এটি পড়তে পারে।
ফ্লেচ

7

অন্যান্য উত্তরগুলি ভাল, তবে এ সম্পর্কে কোনও মন্তব্য করবেন না:

"এটি কি কোনও নিয়ম বা পরবর্তী জেডকে রিলিজগুলিতে পরিবর্তন না হওয়ার গ্যারান্টি নেই?"

আমি বিশ্বাস করি না যে ভবিষ্যতে জেডিকে-তে গ্যারান্টি রয়েছে, তাই আপনার তাদের সম্পর্কেও চিন্তা করা উচিত নয়। এগুলি কার্যকর করার কোনও উপায় নেই, ভবিষ্যতে জেডিকে নেতৃত্বগুলি কেবল এই ধরনের গ্যারান্টিটি পুনর্বিবেচনা করার সিদ্ধান্ত নিতে পারে। এটি সংসদের ওয়েস্টমিনস্টার পদ্ধতির মতো: "কোনও সংসদই ভবিষ্যতের সংসদ আবদ্ধ করতে পারে না।"

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

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