[英]Pass enum type as parameter
在 class TestUtil.java
:
public static <E extends Enum<E>> E mapToEnum(Enum<E> mappingEnum, String data) {
return mappingEnum.valueOf(E, data); // Not working, needs Class of Enum and String value
}
枚舉:
public enum TestEnum {
TEST1("A"),
TEST2("B");
private String value;
private TestEnum(String value) {
this.value = value;
}
}
它應該如何工作(例如在 main 方法中):
TestEnum x = TestUtil.mapToEnum(TestEnum.class, "TEST1"); // TEST1 is the name of the first enum instance
問題是,我無法弄清楚我需要將什么傳遞給mapToEnum
方法,以便我可以從該 Enum 中獲取valueOf
。
如果您提供的代碼是可接受的:
public static <E extends Enum<E>> E mapToEnum(Enum<E> mappingEnum, String data) {
return mappingEnum.valueOf(E, data); // Not working, needs Class of Enum and String value
}
那么你所要做的就是修復它。
這是我測試的代碼:
static <T extends Enum<T>> T mapToEnum(Class<T> mappingEnum, String data) {
return Enum.valueOf(mappingEnum, data);
}
用法:
@Test
public void test() {
TestEnum myEnum = mapToEnum(TestEnum.class, "TEST1");
System.out.println(myEnum.value); //prints "A"
}
強烈建議像這樣使用Apache commons-lang庫作為樣板 function ......
TestEnum x = EnumUtils.getEnum(TestEnum.class, "TEST1");
...這正是@Fenio 演示的代碼,但使用null
處理null
或錯誤輸入,而不是拋出異常。
如果您對此一無所知,請查看 lang3 庫的 rest 包含什么。 我將其視為事實上的標准,使數百萬開發人員免於重新編寫小型管道實用程序。
這就是您如何迭代枚舉 class 值並匹配您在方法中傳遞的參數,請檢查下面提到的代碼。
enum TestEnum {
TEST1("test1"),
TEST2("test2");
private String value;
private TestEnum(String value) {
this.value = value;
}
public String getName() {
return value;
}
public static TestEnum mapToEnum(String data) {
for (TestEnum userType : TestEnum.values()) {
if (userType.getName().equals(data)) {
return userType;
}
}
return null;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.