如何在隐式长到双转换时产生编译错误?

Seb*_*iot 5 java double long-integer

当"long"被隐式转换为"double"时,有没有办法让Java编译器产生错误,因为这会导致数据丢失?

编辑:我不能接受亚历克斯的答案的原因是它击败了我的目的.我想要做的是创建一个最小的 "functor"API,它不会通过直接支持原始类型而导致垃圾,而不是仅使用泛型支持对象类型.但是为了保持接口数量少,我想尽量少使用类型.只有double和Object,对于参数和返回值,我支持(几乎)所有类型而不会导致垃圾,也不会丢失任何数据(布尔值不会转换为double,但也不会因autoboxing而导致垃圾,AFAIK,所以没关系明确地支持它).由于除boolean和long之外的所有原始类型都可以安全地和隐式地转换为double,因此我几乎满足了所有需求.

这就是问题的来源:如果我不在API中添加明确的支持,如何防止长期使用,因为它会导致错误?当然,使用java.lang.Double而不是double会导致垃圾,因此使API变得毫无意义.

在有人要求之前,我会说我想在实时Android游戏中使用API​​,其中"垃圾"是一个真正的问题,与JVM不同.

das*_*ght 3

不,这是不可能的。根据 Java 语言规范,longtodouble被认为是扩展转换。它永远不会触发编译或运行时错误。

\n\n
\n

(JLS,第 5.1.2 节)尽管可能会发生精度损失,但扩大原始转换\n 永远不会导致运行时异常 (\xc2\xa711.1.1)。

\n
\n

  • @SebastienDiot 如果有任何工具有它,它可能是 IntelliJ。他们拥有令人印象深刻的代码分析设置集合,看看发现这样的精度损失是否是他们提供的检查之一。 (2认同)