Java перечисляет элементы с пробелами?
Im работает над java, я создал перечисление следующим образом:
public enum myEnum
{
india,
russian,
england,
north America
}
В приведенном выше примере приводятся ошибки при использовании пробела во имя элемента (например, в Северной Америке).
Любые предложения по устранению вышеуказанных проблем?
Ответы
Ответ 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;
}