java 反射 获取enum_java:反射获取枚举

本文介绍如何在Java中使用反射安全地实例化和处理枚举类型,同时解决编译时的警告和错误。主要内容包括通过反射获取枚举类并使用Enum.valueOf()方法,以及处理与此相关的类型安全问题。
摘要由CSDN通过智能技术生成

这与Java类似但不完全相同:使用反射实例化枚举

我有一个Map, FooHandler>我想用来映射Enums(我不关心哪种类型,或者即使它们是同一类型,只要它们是枚举常量)到我的FooHandler类。

我想使用我阅读的文本文件填充此地图。我可以让它工作,但我有两个警告我想绕过:

static private > E getEnum(String enumFullName) {

// see https://stackoverflow.com/questions/4545937/

String[] x = enumFullName.split("\.(?=[^\.]+$)");

if (x.length == 2)

{

String enumClassName = x[0];

String enumName = x[1];

try {

Class cl = (Class)Class.forName(enumClassName);

// #1

return Enum.valueOf(cl, enumName);

}

catch (ClassNotFoundException e) {

e.printStackTrace();

}

}

return null;

}

public void someMethod(String enumName, String fooHandlerName)

{

FooHandler fooHandler = getFooHandler(fooHandlerName);

Enum e = getEnum(enumName);

// #2

map.put(e, fooHandler);

}

警告#1:未经检查的演员

警告#2:枚举是一种原始类型。

我得到#1并且我可以发出警告,但我似乎无法击败警告#2;我试过Enum>,这只是给我一个关于泛型类型捕获绑定不匹配的错误。

更糟糕的替代实施:

在我的>泛型返回值之前,我尝试返回Enum并且它不起作用;我收到了这些警告/错误:

static private Enum> getEnum(String enumFullName) {

...

Class> cl = (Class>)Class.forName(enumClassName);

// 1

return Enum.valueOf(cl, enumName);

// 2

}

警告:

- Type safety: Unchecked cast from Class to Class

- Enum is a raw type. References to generic type Enum should be parameterized

- Enum is a raw type. References to generic type Enum should be parameterized

- Unnecessary cast from Class to Class>

错误:

- Type mismatch: cannot convert from capture#5-of ? to Enum>

- Type safety: Unchecked invocation valueOf(Class, String) of the generic method

valueOf(Class, String) of type Enum

- Bound mismatch: The generic method valueOf(Class, String) of type Enum is not

applicable for the arguments (Class, String). The inferred type capture#5-of ? is not

a valid substitute for the bounded parameter >

还有这个:

static private Enum> getEnum(String enumFullName) {

...

Class> cl = (Class>)Class.forName(enumClassName);

// 1

return Enum.valueOf(cl, enumName);

// 2

警告:Type safety: Unchecked cast from Class to Class>

错误:Bound mismatch: The generic method valueOf(Class, String) of type Enum is not applicable for the arguments (Class>, String). The inferred type Enum> is not a valid substitute for the bounded parameter >

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值