Подтвердить что ты не робот

Java перечисляет элементы с пробелами?

Im работает над java, я создал перечисление следующим образом:

public enum myEnum
{
    india,
    russian,
    england,
    north America
}

В приведенном выше примере приводятся ошибки при использовании пробела во имя элемента (например, в Северной Америке). Любые предложения по устранению вышеуказанных проблем?

4b9b3361

Ответ 1

Вы не можете разместить пробел в середине идентификатора.

По завершении этого идентификатора и анализатора предполагается, что все, что приходит дальше, является допустимым маркером в контексте этого оператора. Есть несколько (если есть) мест, которые были бы законными.

Обычными именами значений Java будут:

INDIA,         // Or  India,
RUSSIA,        //     Russia,
NORTH_AMERICA; //     NorthAmerica;

An enum может иметь связанные свойства, такие как человекочитаемые имена, например,

public enum CountryAndOneContinent {

    INDIA("India"),
    RUSSIA("Russia"),
    NORTH_AMERICA("North America");

    private String displayName;

    CountryAndOneContinent(String displayName) {
        this.displayName = displayName;
    }

    public String displayName() { return displayName; }

    // Optionally and/or additionally, toString.
    @Override public String toString() { return displayName; }
}

Я неоднозначно отношусь к использованию toString для представления представлений на уровне представления.

Я предпочитаю, чтобы методы сообщали свою цель явно: это более выразительно и очевидно.

toString довольно общий и допускает только одно представление. Может потребоваться несколько выходных форматов в зависимости от контекста, параметров и т.д., Которые toString не позволяет.

Преимущества toString включают в себя использование строковых операций по умолчанию для объекта, и в этом случае с помощью valueOf можно напрямую перевести с удобочитаемой версии на значение перечисления.

Ответ 2

Я гонг, чтобы идти вперед и догадываться, почему вам нужно место в названии; потому что вы хотите ссылаться на него как на строку.

Сделайте так:

public enum MyEnum {
    INDIA("India"),
    RUSSIAN("Russian"),
    ENGLAND("England"),
    NORTH_AMERICA("North America");    

    private String name;

    MyEnum(String name) {
        this.name = name;
    }

    public String getName() {
        return this.name;
    }    
}

Вы можете рассмотреть переопределяющую строку.

public toString() {
    return name;
}

Преимущество переопределения toString() заключается в том, что эта строка также может использоваться в MyEnum.valueOf(myString). Поэтому переопределение toString в основном создает HashMap значений перечисления.

Ответ 3

Проблема не имеет ничего (конкретно) в отношении перечислений: в Java имена не могут иметь пробелы. Попытайтесь устранить пространство (используя капитализацию, чтобы разделить бит) или вместо этого используйте символы подчеркивания.

Ответ 4

Запишите их вместе как northAmerica или используйте знак подчеркивания north_America.

Ответ 5

Правило именования Java не позволяет использовать пробелы как возможные символы в имени переменных, классов, перечислений и членов перечисления (и каждый другой идентификатор). Поэтому эта "проблема" не может быть решена. Просто используйте `north_america 'как имя участника!

Идентификатор - это неограниченная последовательность букв Java и Java цифры, первая из которых должна быть буквой Java.

Буквы Java включают в себя прописные и строчные латинские буквы ASCII A-Z (\ u0041-\u005a) и a-z (\ u0061-\u007a), а для исторических причины, подчеркивание ASCII (_, или \u005f) и знак доллара ($ или \ U0024). Символ $следует использовать только в механически генерируемых исходный код или, реже, доступ к существующим именам в устаревших системах.

"Значения Java" включают в себя цифры ASCII 0-9 (\ u0030-\u0039).

Ответ 6

public enum myEnum
{
    india,
    russian,
    england,
    north_america
}

Чтобы получить доступ к значениям

myEnum.values()

Ответ 7

просто сделайте свою собственную функцию valueOf как функцию в классе enum. Замените пробелы символами подчеркивания. назовите свои константы enum, как это "north_america (" Северная Америка ")". Если метод не находит ваше перечисление, он просто возвращает параметр.

public  static String valueOfOrDefault(String myValue) {
//replace space with underscore so it matches enum name
        String value=myValue.toUpperCase().replaceAll("\\s", "_");
        for(myEnum type : myEnum.class.getEnumConstants()) {
          if(type.name().equalsIgnoreCase(value)) {
            return type.toString();
          }
        }
        return myValue;
      }