在我的项目中,我有一个像这样的枚举:
public enum MyEnum {
FIRST(1),
SECOND(2);
private int value;
private MyEnum(int value) {
this.value = value;
}
public int getValue() {
return value;
}
public static MyEnum fromValue(int value) {
for (MyEnum e : MyEnum.values()) {
if (e.getValue() == value) {
return e;
}
}
return null;
}
我有这段代码:
Map<String, Object> myMap = new HashMap<>();
// Fill my Map with data from database
myMap = namedParameterJdbcTemplate.queryForList(qry, paramsMap);
***if (Arrays.asList(MyEnum.values())
.contains(MyEnum.fromValue((int)
myMap.get("myKey")) )))*** {
// Do something
}
我得到异常
java.lang.ClassCastException: java.lang.Short cannot be cast to java.lang.Integer** on this line : **if (Arrays.asList(MyEnum.values())
.contains(MyEnum.fromValue((int)myMap.get("myKey")) )))
myMap 填充了来自数据库的数据,知道它是一个 SQL Server 数据库并且 myKey> 从数据库返回的是数据库中的 tinyint 类型。
你能告诉我我做错了什么吗? 谢谢。
问候。
最佳答案
这里:
(int)myMap.get("myKey")
我猜想 get 方法返回了对 Short 对象的引用,该对象不能转换为 Integer,因为 short 不是从 Integer 继承的。
您可以做的是转换为 Short,然后调用 intValue method ,像这样:
((Short)myMap.get("myKey")).intValue()
这将返回一个整数值
关于java.lang.ClassCastException : java. lang.Short 无法转换为 java.lang.Integer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45324241/