将Long转换为Integer会抛出ClassCastException

时间:2013-01-14 23:08:42

标签: java google-app-engine exception casting

我试图将一个long转换为int,但失败了。如果重要的话,我会在Google App Engine的Servlet中使用它。我已经对post1post2 docs进行了搜索,但没有结果 从我的日志。指向这一行:

//fields
private int multiplyer;
private Map<String, Object> mappings;



//the method
        Echo.log.info("key: "+WinningSetMappingEnum.multiplyer.toString()
        +"  value: "
        +mappings.get(WinningSetMappingEnum.multiplyer.toString())
        +"  "
        +mappings.get(WinningSetMappingEnum.multiplyer.toString()).getClass().getName()
                    );//For logging

         multiplyer=(Integer)mappings.get(MappingEnum.multiplyer.toString());//PROBLEM

LOG:

com.wtsang02.deserlizeMapping: key: multiplyer value: 0 java.lang.Long
java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer

2 个答案:

答案 0 :(得分:3)

LongInteger都延伸java.lang.Number

您希望如何将一个类转换为另一个不直接相关的类?您可以投射的是原始值

  Integer i = (int) (myLong.longValue())

虽然在intValue()中使用Long方法会更容易。

答案 1 :(得分:0)

private Map<String, Object> mappings;

返回一个Object。因此解决方案是

long l = (Long) mappings.get(WinningSetMappingEnum.multiplyer
                .toString());
        multiplyer = (int) l;