উত্তর:
আপনি কী করতে চান তা আমি জানি না, তবে এইভাবে আমি আপনার উদাহরণ কোডটি অনুবাদ করেছি ...
package test;
/**
* @author The Elite Gentleman
*
*/
public enum Strings {
STRING_ONE("ONE"),
STRING_TWO("TWO")
;
private final String text;
/**
* @param text
*/
Strings(final String text) {
this.text = text;
}
/* (non-Javadoc)
* @see java.lang.Enum#toString()
*/
@Override
public String toString() {
return text;
}
}
বিকল্পভাবে, আপনি এর জন্য একটি গেটর পদ্ধতি তৈরি করতে পারেন text
।
আপনি এখন করতে পারেন Strings.STRING_ONE.toString();
final
সবচেয়ে ভাল হবে be
new
হিসাবে এনামগুলি দিয়ে তৈরি করা যায় না private
। মূলত, অবজেক্ট তৈরি নিষিদ্ধ এবং এক্ষেত্রে final
সত্যই প্রয়োজনীয় নয়।
setText(String)
এবং এটি নরককে মুক্ত করতে পারে :) এই জাতীয় সংকলনের final
সহায়তার সাথে ধ্রুবক যে আপনার উদ্দেশ্যটি নথিভুক্ত করে। আপনি যদি String
ধ্রুবক ব্যবহার করেন তবে আপনি এটিকে ঠিক হিসাবে ঘোষণা করবেন না public static String
?
এনুমের জন্য কাস্টম স্ট্রিংয়ের মান
http://javahowto.blogspot.com/2006/10/custom-string-values-for-enum.html থেকে
জাভা এনুমের জন্য ডিফল্ট স্ট্রিং মানটি তার মুখের মান বা উপাদানটির নাম। তবে আপনি স্ট্রিং () পদ্ধতিতে ওভাররাইড করে স্ট্রিংয়ের মানটি কাস্টমাইজ করতে পারেন। উদাহরণ স্বরূপ,
public enum MyType {
ONE {
public String toString() {
return "this is one";
}
},
TWO {
public String toString() {
return "this is two";
}
}
}
নিম্নলিখিত পরীক্ষার কোডটি চালানো এটিকে উত্পাদন করবে:
public class EnumTest {
public static void main(String[] args) {
System.out.println(MyType.ONE);
System.out.println(MyType.TWO);
}
}
this is one
this is two
bin
ডিরেক্টরিতে নিম্নলিখিতটি দেখতে পাবেন : এনামটাইস্ট $ মাইটাইপ.ক্লাস এনামটাইস্ট $ মাইটাইপ $ 1 ক্লাস এনামটেষ্ট $ মাইটাইপ $ 2.class যা বাস্তব দ্রুত যোগ করবে । এনাম কনস্ট্রাক্টরকে মানগুলিতে পাঠিয়ে প্রত্যাশিত উত্তর হিসাবে এটি করা ভাল। আমি আসলে ওভাররাইডের সাথে একমত নই toString()
; আমি বিশ্বাস করি যেমন একটি সুনির্দিষ্ট সংগ্রহকারী ব্যবহার করতে ভালো getKey()
অগ্রাহ্য যেহেতু toString()
enum এর অন্য কোনো ব্যবহারকারী অপ্রত্যাশিত হতে পারে।
এর name()
পদ্ধতিটি ব্যবহার করুন :
public class Main {
public static void main(String[] args) throws Exception {
System.out.println(Strings.ONE.name());
}
}
enum Strings {
ONE, TWO, THREE
}
ফলন ONE
।
Strings.STRING_ONE.name()
"একক" নয়, "STRING_ONE" ফলন দেয়। এটি সহজ উত্তর নয়। আপনার কাছে এমন কোনও স্ট্রিং থাকতে পারে না যা বৈধ জাভা শনাক্তকারী ইত্যাদি হবে না
name()
কোনও অবিস্মরণীয় প্রোগ্রাম দ্বারা প্রভাবিত হতে পারে। আমি কিছুক্ষণ আগে একই ধরণের সমস্যায় পড়েছি। উদাহরণস্বরূপ, প্রোগার্ডের সাথে আপনার এটিকে ঘিরে কাজ করা প্রয়োজন। দেখুন প্রসেসিং এনুমারেশন ক্লাস
হয় এনাম নামটি আপনার পছন্দ মতো স্ট্রিংয়ের মতো সেট করুন বা আরও সাধারণভাবে, আপনি নিজের এনাম মানগুলির সাথে স্বেচ্ছাচারিত গুণাবলী যুক্ত করতে পারেন:
enum Strings {
STRING_ONE("ONE"), STRING_TWO("TWO");
private final String stringValue;
Strings(final String s) { stringValue = s; }
public String toString() { return stringValue; }
// further methods, attributes, etc.
}
শীর্ষে স্থির হওয়াগুলি এবং নীচে পদ্ধতিগুলি / বৈশিষ্ট্যগুলি থাকা গুরুত্বপূর্ণ।
"এগুলি স্ট্রিং হিসাবে ব্যবহার করুন" বলতে আপনার বোঝার উপর নির্ভর করে আপনি এখানে কোনও এনাম ব্যবহার করতে চাইবেন না। বেশিরভাগ ক্ষেত্রেই, এলিট জেন্টলম্যান প্রস্তাবিত সমাধানটি আপনাকে তাদের টস্ট্রিং-পদ্ধতিগুলির মাধ্যমে ব্যবহার করতে দেয়, উদাহরণস্বরূপ System.out.println(STRING_ONE)
বা এগুলি String s = "Hello "+STRING_TWO
, তবে যখন আপনার সত্যিকারের স্ট্রিংস (উদাহরণস্বরূপ STRING_ONE.toLowerCase()
) দরকার হয়, আপনি তাদের ধ্রুবক হিসাবে সংজ্ঞায়িত করতে পছন্দ করতে পারেন:
public interface Strings{
public static final String STRING_ONE = "ONE";
public static final String STRING_TWO = "TWO";
}
toLowerCase()
আমার সমাধানটিও চায় তবে তারা যেতে পারে Strings.STRING_TWO.toString().toLowerCase()
।
interface
কোনও final
ক্লাসের জায়গায় ব্যবহার করা উচিত নয় private
। এটি নিরুৎসাহিত অনুশীলন।
আপনি এটি স্ট্রিং এনুমের জন্য ব্যবহার করতে পারেন
public enum EnumTest {
NAME_ONE("Name 1"),
NAME_TWO("Name 2");
private final String name;
/**
* @param name
*/
private EnumTest(final String name) {
this.name = name;
}
public String getName() {
return name;
}
}
এবং মূল পদ্ধতি থেকে কল করুন
public class Test {
public static void main (String args[]){
System.out.println(EnumTest.NAME_ONE.getName());
System.out.println(EnumTest.NAME_TWO.getName());
}
}
আপনি যদি কনস্ট্রাক্টর ব্যবহার করতে না চান এবং আপনি এই পদ্ধতির কোনও বিশেষ নাম রাখতে চান তবে এটি ব্যবহার করে দেখুন:
public enum MyType {
ONE {
public String getDescription() {
return "this is one";
}
},
TWO {
public String getDescription() {
return "this is two";
}
};
public abstract String getDescription();
}
আমি সন্দেহ করি যে এটিই দ্রুত সমাধান। চূড়ান্ত চূড়ান্ত ব্যবহার করার প্রয়োজন নেই ।
private String text
চূড়ান্ত হওয়া উচিত।