-3

当变量类型不匹配时,有没有办法强制 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-视觉基础

4

2 回答 2

1

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

result = 1.0/intValue*(intValue-dblValue);
于 2017-01-28T21:30:31.100 回答
0

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

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

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

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

于 2017-01-28T23:23:34.080 回答