- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
当“long”被隐式转换为“double”时,有没有办法让 Java 编译器产生一个错误,因为这会导致数据丢失?
编辑:我不能接受亚历克斯的回答的原因是它违背了我的目的。我想做的是创建一个最小“仿函数”API,通过直接支持原始类型而不是仅支持使用泛型的对象类型,不会导致垃圾。但是为了保持接口(interface)的数量少,我想使用尽可能少的类型。只有 double 和 Object,对于参数和返回值,我支持(几乎)所有类型而不会导致垃圾,也不会丢失任何数据(boolean 不会转换为 double,但也不会通过自动装箱导致垃圾,AFAIK,所以没关系明确支持它)。由于除 boolean 和 long 之外的所有原始类型都可以安全地隐式转换为 double,因此我几乎满足了所有需求。
这就是问题的来源:如果我不在该 API 中添加对 long 的明确支持,如何完全防止使用 long,因为它会导致错误?当然,使用 java.lang.Double 而不是 double 会导致垃圾,因此使 API 毫无意义。
在有人问之前,我会说我想在实时 Android 游戏中使用该 API,与 JVM 不同,“垃圾”是一个真正的问题。
最佳答案
不,这是不可能的。根据 Java 语言规范,long
到 double
被认为是一个加宽转换。它永远不会触发编译或运行时错误。
(JLS, section 5.1.2) Despite the fact that loss of precision may occur, a widening primitive conversion never results in a run-time exception (§11.1.1).
关于java - 如何在隐式 long 到 double 转换时产生编译错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24265668/
我是一名优秀的程序员,十分优秀!