在Java中,验证从longint的强制转换不会丢失任何信息的最常用方法是什么?

这是我当前的实现:

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;
}

推荐答案

为了实现这一点,增加了一种新的方法,增加了Java 8个.

import static java.lang.Math.toIntExact;

long foo = 10L;
int bar = toIntExact(foo);

在溢出的情况下会抛出ArithmeticException分.

请参阅:Math.toIntExact(long)

Java8中还添加了其他几个溢出安全方法,它们以exact结尾.

示例:

  • Math.incrementExact(long)
  • Math.subtractExact(long, long)
  • Math.decrementExact(long)
  • Math.negateExact(long),
  • Math.subtractExact(int, int)

Java相关问答推荐

如何在Docker容器中使用wireock—Webhooks阻止请求?

如何使用Java API在Oracle ODI中运行模拟?

Java中实现的归并排序算法给出ArrayIndexOutOfBound异常

Hibernate EmptyInterceptor可以工作,但不能拦截器

Java编译器抛出可能未正确初始化的错误?

使用UTC时区将startDatetime转换为本地时间

与不同顺序的组进行匹配,不重复组但分开

带错误BER验证的itext8签名返回pdf

如何在JavaFX中处理多个按钮

如何使用log4j2(Json)记录由";异常引起的所有";?

AbstractList保证溢出到其他方法

如何生成指定范围内的11位序列号?

如何处理两个几乎相同的XSD文件?

记录是类的语法糖吗?

有没有办法在o(log(N))中以系统的方式将数组中的小块元素复制和移动到新增长的数组中的左侧?

在不使用instanceof或强制转换的情况下从父类变量调用子类方法

org.springframework.web.HttpRequestMethodNotSupportedException:请求方法';帖子';不支持

java.lang.ClassCastException:com.google.firebase.FirebaseException无法转换为com.google.fire base.auth.FirebaseAuthException

Java泛型方法重载

Maven创建带有特定类的Spring Boot jar和普通jar