Я не знаю названия, когда он имеет схему, но имя хоста с портом коллективно известно как Authority
. Хорошее объяснение here
.
Да, Blah.valueOf("A")
даст Вам Blah.A
.
Примечание, что имя должно быть точное совпадение, включая случай: Blah.valueOf("a")
и Blah.valueOf("A ")
оба бросают IllegalArgumentException
.
статические методы valueOf()
и values()
создаются во время компиляции и не появляются в исходном коде. Они действительно появляются в Javadoc, хотя; например, Dialog.ModalityType
шоу оба метода.
Лучше всего использовать Blah.valueOf (string)
, но вы также можете использовать Enum.valueOf (Blah.class, string)
.
Вы также должны быть осторожны со своим чемоданом. Позвольте мне объяснить: выполнение Blah.valueOf ("A")
работает, но Blah.valueOf ("a")
не работает. Затем снова Blah.valueOf ("a" .toUpperCase (Locale.ENGLISH))
будет работать.
edit
Изменил наUpperCase
на наUpperCase (Locale.ENGLISH )
на основе tc. комментарий и java-документы
edit2
На Android вы должны использовать Locale.US
, как sulai указывает .
Вот отличная утилита, которую я использую:
/**
* A common method for all enums since they can't have another base class
* @param <T> Enum type
* @param c enum type. All enums must be all caps.
* @param string case insensitive
* @return corresponding enum, or null
*/
public static <T extends Enum<T>> T getEnumFromString(Class<T> c, String string) {
if( c != null && string != null ) {
try {
return Enum.valueOf(c, string.trim().toUpperCase());
} catch(IllegalArgumentException ex) {
}
}
return null;
}
Затем в моем классе перечислений я обычно использую это, чтобы сэкономить время на вводе:
public static MyEnum fromString(String name) {
return getEnumFromString(MyEnum.class, name);
}
Если ваши перечисления не все заглавные, просто измените Строка Enum.valueOf
.
Жаль, что я не могу использовать T.class
для Enum.valueOf
, поскольку T
стирается.
Другое решение, если текст не совпадает со значением перечисления:
public enum Blah {
A("text1"),
B("text2"),
C("text3"),
D("text4");
private String text;
Blah(String text) {
this.text = text;
}
public String getText() {
return this.text;
}
public static Blah fromString(String text) {
for (Blah b : Blah.values()) {
if (b.text.equalsIgnoreCase(text)) {
return b;
}
}
return null;
}
}