我正在尝试使用默认方法创建一个接口,该方法返回该枚举的 valueOf(string) 或 null 它没有任何,因此我可以轻松实现它,而无需全部粘贴此代码的非通用变体我需要这样的东西的课程。所以我尝试这样做,但它不能编译:public interface EnumWNull<T extends Enum<T>> { default T getEnumOrNull(String value){ try { return Enum.valueOf(T /*Error: expression expected*/, value); }catch (Exception e){ return null; } }}我不明白为什么。而且我实际上知道我可以读取所有值并手动搜索它,但是为了学习和优雅,我想知道比这更好的方法(我觉得应该有更好的方法,如果没有的话) t,valueOf 的静态变体的目的是什么?)。
2 回答
不负相思意
TA贡献1777条经验 获得超10个赞
你不能不传递一个Class对象。您需要模仿以下签名Enum.valueOf():
static <T extends Enum<T>> T getEnumOrNull(Class<T> enumType, String name) {
try {
return Enum.valueOf(enumType, name);
} catch (IllegalArgumentException e) {
return null;
}
}
添加回答
举报
0/150
提交
取消