当前位置: 首页 > 知识库问答 >
问题:

java.lang.类异常:java.lang.不能转换为java.lang.整数

韶浩博
2023-03-14

在我的项目中,我有这样一个枚举:

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类型。

你能告诉我我做错了什么吗?谢谢

当做

共有3个答案

葛磊
2023-03-14

在这里:

(int)myMap.get("myKey")

我猜get方法返回了对Short对象的引用,该对象不能转换为Integer,因为Short不继承Integer。

您可以做的是将其转换为Short,然后调用intValue方法,如下所示:

((Short)myMap.get("myKey")).intValue()

它将返回一个整数值

马煌
2023-03-14

试试这个。

(int)(short)myMap.get("myKey")
薛利
2023-03-14

java.lang.类异常:java.lang.不能转换为java.lang.整数

这里myMap。get(“myKey”)返回一个Short实例,但是返回的声明对象是object,因为映射是声明的map

就好像你写了:

Object myValue = myMap.get("myKey")

然后将声明为对象的Short对象传递给MyEnum。fromValue(),其参数为int

MyEnum.fromValue((int)myValue));

编译器尝试将对象转换为整数。但它不是整数,而是短代码。

要解决问题,您应该首先检查对象的实例。
如果对象不是短期的实例,您应该抛出异常或忽略该值。
如果是,您应该从Object ,并将此传递到fromValue(),该将自动被解压为

   Object myValue =  myMap.get("myKey");
   if (!(myValue instanceof Short)){          
      throw new YourRuntimeException("A Short is expected but get a " + myValue.getClass());
      // or ignore the value
   }

   if (Arrays.asList(MyEnum.values())
              .contains(MyEnum.fromValue(((short) myValue)) {
           ....
    }

 类似资料: