在Java中安全地将long转换为intJava中最常用的方法是验证转换long为int不会丢失任何信息?这是我目前的实施:public static int safeLongToInt(long l) {
int i = (int)l;
if ((long)i != l) {
throw new IllegalArgumentException(l + " cannot be cast to int without changing its value.");
}
return i;}
3 回答

开心每一天1111
TA贡献1836条经验 获得超13个赞
使用Google Guava的Ints类,您的方法可以更改为:
public static int safeLongToInt(long l) { return Ints.checkedCast(l);}
来自链接的文档:
checkedCast时
public static int checkedCast(long value)
value
如果可能,返回等于的int值。参数:
value
-int
类型范围内的任何值返回:
int
等于 的值value
抛出:
IllegalArgumentException
- 如果value
大于Integer.MAX_VALUE
或小于Integer.MIN_VALUE
顺便说一下,你不需要safeLongToInt
包装器,除非你想将它留在原地以便更改功能而不需要进行大量的重构。

宝慕林4294392
TA贡献2021条经验 获得超8个赞
不要:这不是解决方案!
我的第一个方法是:
public int longToInt(long theLongOne) { return Long.valueOf(theLongOne).intValue();}
但这只是将long转换为int,可能会创建新Long
实例或从Long池中检索它们。
缺点
Long.valueOf
Long
如果数字不在Long
池范围内,则创建一个新实例[-128,127]。该
intValue
实施确实不外乎:return (int)value;
因此,这可以被认为不仅仅是铸造更糟糕long
来int
。
添加回答
举报
0/150
提交
取消