Як отримати значення enum з тією ж назвою як ключ?

У мене є наступні:

private static enum CD1 { CC, COR, PO };
private static enum CD2 { OMA, PBO, VAR };
private static enum CD3  { USD, EUR, GBP };
private static enum CD4  { IR, CD, COT };

Коли я кажу CD1.CC, я хочу CC, а не 0;

Я не хочу розміщувати конструктор у кожному переліку і перевизначати toString для повернення значення;

private static enum CD1 { 
 CC("CC"), COR("COR"), PO("PO") ; 
 private String val;

 CD1(String val); this.val = val;

 public String toString() {
  return val;
 }

Чи є спосіб узагальнити це, так що я не повинен писати конструктор для кожного перерахування?

EDIT:

Чи є спосіб уникнути використання enumVal.name ()? Я планую використовувати тільки enum.enumVal. Але, цікаво, якщо це можливо. На жаль, це питання не було чітким.

4
Не могли б ви пояснити, що ви маєте на увазі з "я планую використовувати тільки enum.enumVal"?
додано Автор Puce, джерело
Не могли б ви пояснити, що ви маєте на увазі з "я планую використовувати тільки enum.enumVal"?
додано Автор Puce, джерело
Не могли б ви пояснити, що ви маєте на увазі з "я планую використовувати тільки enum.enumVal"?
додано Автор Puce, джерело
@BheshGurung Так, мені не потрібно перевизначати toString (). Можливо, це мій нагляд і поганий питання. Дякую за вашу відповідь.
додано Автор would_like_to_be_anon, джерело
Для того, що ви хочете, ви не повинні перекривати метод toString() . Документи кажуть: Повертає назву цієї константи переліку ... .
додано Автор Bhesh Gurung, джерело
Для того, що ви хочете, ви не повинні перекривати метод toString() . Документи кажуть: Повертає назву цієї константи переліку ... .
додано Автор Bhesh Gurung, джерело
Для того, що ви хочете, ви не повинні перекривати метод toString() . Документи кажуть: Повертає назву цієї константи переліку ... .
додано Автор Bhesh Gurung, джерело
Я не бачу ніякої різниці між ними. Короткі версії переписів повинні виробляти те ж саме, що і довгі версії. У чому різниця ви бачите? FYI, повертаючи name() з toString() або просто використовуючи name() , матиме той самий результат.
додано Автор John B, джерело
Я не бачу ніякої різниці між ними. Короткі версії переписів повинні виробляти те ж саме, що і довгі версії. У чому різниця ви бачите? FYI, повертаючи name() з toString() або просто використовуючи name() , матиме той самий результат.
додано Автор John B, джерело

8 Відповіді

використання

enumVal.name()

Це вбудовано в перелік Java

2
додано
Чи є спосіб уникнути використання enumVal.name ()? Я планую використовувати тільки enum.enumVal. Але, цікаво, якщо це можливо. На жаль, це питання не було чітким. Я буду оновлювати своє запитання.
додано Автор would_like_to_be_anon, джерело

використання

enumVal.name()

Це вбудовано в перелік Java

2
додано
Чи є спосіб уникнути використання enumVal.name ()? Я планую використовувати тільки enum.enumVal. Але, цікаво, якщо це можливо. На жаль, це питання не було чітким. Я буду оновлювати своє запитання.
додано Автор would_like_to_be_anon, джерело

використання

enumVal.name()

Це вбудовано в перелік Java

2
додано
Чи є спосіб уникнути використання enumVal.name ()? Я планую використовувати тільки enum.enumVal. Але, цікаво, якщо це можливо. На жаль, це питання не було чітким. Я буду оновлювати своє запитання.
додано Автор would_like_to_be_anon, джерело

Як казали інші, ви можете отримати позначку, яку ви вирішили використати для константи перерахування, використовуючи метод name ().

name() призначено для повернення мітки. Цей метод призначений для використання в програмах і програмах, які залежать від цього подання.

toString() призначений для перевизначення або використання програмістами для створення більш «відповідного користувачеві» відображення інформації.

Мені здається, що ви хочете використовувати функцію name ().

0
додано

Як казали інші, ви можете отримати позначку, яку ви вирішили використати для константи перерахування, використовуючи метод name ().

name() призначено для повернення мітки. Цей метод призначений для використання в програмах і програмах, які залежать від цього подання.

toString() призначений для перевизначення або використання програмістами для створення більш «відповідного користувачеві» відображення інформації.

Мені здається, що ви хочете використовувати функцію name ().

0
додано

Ви можете скористатися методом Enum.name() або просто println() безпосередньо.

System.out.println(CD1.COR);//prints: COR

If you wouldn't like to call name() explicitly; just override toString()
Just dug into the source code; turns out it's the default behaviour (as pointed by @Puce)

public final String name() {
    return name;
}

public String toString() {
    return name;
}

різниця полягає в тому, що name() не може бути перевизначено.

0
додано
Це вже поведінка за замовчуванням.
додано Автор Puce, джерело

Ви можете скористатися методом Enum.name() або просто println() безпосередньо.

System.out.println(CD1.COR);//prints: COR

If you wouldn't like to call name() explicitly; just override toString()
Just dug into the source code; turns out it's the default behaviour (as pointed by @Puce)

public final String name() {
    return name;
}

public String toString() {
    return name;
}

різниця полягає в тому, що name() не може бути перевизначено.

0
додано
Це вже поведінка за замовчуванням.
додано Автор Puce, джерело

Ви можете скористатися методом Enum.name() або просто println() безпосередньо.

System.out.println(CD1.COR);//prints: COR

If you wouldn't like to call name() explicitly; just override toString()
Just dug into the source code; turns out it's the default behaviour (as pointed by @Puce)

public final String name() {
    return name;
}

public String toString() {
    return name;
}

різниця полягає в тому, що name() не може бути перевизначено.

0
додано
Це вже поведінка за замовчуванням.
додано Автор Puce, джерело
ІТ КПІ - Java
ІТ КПІ - Java
436 учасників