如下代码有个枚举类,怎样才能将字符串“arin”转成WhoisRIR.ARIN枚举类呢?
问题
WhoisRIR rir = //convert 'arin' to enum WhoisRIR.ARIN?
public enum WhoisRIR {
ARIN("whois.arin.net"),
RIPE("whois.ripe.net"),
APNIC("whois.apnic.net");
}
private String url;
private WhoisRIR(String url) {
this.url = url;
}
public String getUrl() {
return url;
}
解决
为了解决这个问题,我们可以使用枚举的valueof()方法将字符串转化大写并设置默认的国际化。
import java.util.Locale;
public class EnumTest {
public static void main(String[] args) {
//Solution: Uses valueOf()
System.out.println(WhoisRIR.valueOf("arin".toUpperCase()));
//Recommended Solution: add locale
WhoisRIR rir = WhoisRIR.valueOf("ripe".toUpperCase(Locale.ENGLISH));
System.out.println(rir);
System.out.println(rir.getUrl());
}
}
ARIN
RIPE
whois.ripe.net
再做下测试,不将字符串转化为大写:
import java.util.Locale;
public class EnumTest {
public static void main(String[] args) {
//error, need convert the String to uppercase
System.out.println(WhoisRIR.valueOf("arin"));
}
}
Exception in thread "main" java.lang.IllegalArgumentException:
No enum constant com.mkyong.whois.utils.WhoisRIR.arin
at java.lang.Enum.valueOf(Unknown Source)
at com.mkyong.whois.utils.WhoisRIR.valueOf(WhoisRIR.java:1)
at com.mkyong.whois.utils.TestEnum.main(TestEnum.java:17)