我有这个代码会给我一个错误吗?
public int part(Object key) {
long clientId = (long) key;
...
}
以下是错误:
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long
不确定为什么会抛出异常。
答案 0 :(得分:5)
正如评论中所解释的那样,Java不允许将一个原始包装类型转换为另一种类型的基元,即使基元本身允许转换。
您的异常堆栈跟踪显示key参数是Integer对象。如果是这样,那么只需使用专门为此类转换创建的Integer方法:
long clientId = ((Number) key).longValue();
您最好确定密钥始终是一个Number对象,并且该密钥不为null。在调用此方法之前,您可能需要测试null。
答案 1 :(得分:1)
即使您可以从Integer
转换为Long
,也无法将int
投射到long
。这对你有用:
Long clientId = new Long(key)
如果Integer为null,则抛出NPE。我会把错误处理留给你。 :)
或者,您可以使用:
Long clientId = Long.valueOf(key.longValue());