繁体   English   中英

如何让 Java 编译器强制显式类型转换

[英]How to make the Java compiler force explicit type conversion

当变量类型不匹配时,有没有办法强制 java 编译器发出错误而不是隐式转换。 例如:

int intValue=3;
double dblValue = 2.2;
double result;
result = 1/intValue*(intValue-dblValue);

在上面的示例中,java 将 (1/intValue) 隐式转换为值为 0 的整数。

我想要的是编译器在变量类型不匹配而不是隐式转换时发出错误。

提前致谢

Edit1:上面的等式只是一个例子。 我知道如何使用以下任一解决方案来解决此问题:

result = 1.0/intValue*(intValue-dblValue);

或者

result = 1/(double)intValue*((double)intValue-dblValue);

但这不是我所追求的。 谢谢

Edit2:我指的是类型转换而不是类型转换。 我正在寻找编译器来强制执行显式类型转换。

我正在寻找这样的东西: https : //support.microsoft.com/en-us/help/311329/option-explicit-and-option-strict-in-visual-basic-.net-and-in-视觉基础

怎么样,不是将两个整数相除,而是将一个双精度数和一个整数相除?

result = 1.0/intValue*(intValue-dblValue);

“当变量类型不匹配时,有没有办法强制 java 编译器发出错误,而不是隐式类型转换。” 当类型不匹配时,它会发出错误,否则会丢失信息。 正如上面的评论中指出的那样,在您的示例中,没有任何“类型转换”或特定的缩小转换。 编译器正在做它应该做的事情,不,你不能改变它。

“我想要的是编译器......” 遗憾的是,编译器没有考虑你想要的。 它只会执行 Java 语言规范和兼容性要求为符合 Java 语言而指定的操作。

在您的情况下,您指定了一个完全合法的int操作,既不需要扩大也不需要缩小转换,因此即使编译器确实关心您想要什么,也没有什么可抱怨的。

您可以使用 Findbugs 和 CheckStyle 等 lint 工具来预处理您的源代码,以应对各种错误风险,甚至自定义规则。 他们可能会检测到程序员错误地忽略了混合类型表达式中的关联性或类型风险的用例。 它们是极好的工具; 去看一下。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM