我在Java项目中有一个类,它包含一个2D数组值,并提供了与之交互的有用方法。它使用Location对象(只存储两个值)来访问映射中的点并返回值。它有一个方法isValid(),它检查Location对象是否在网格的映射中。
public boolean isValid(Location loc) {
try {
// will throw an ArrayIndexOutOfBoundsException if not valid
// occs is the 2D array within the class
occs[loc.getX()][loc.getY()];
return true;
}
catch (ArrayIndexOutOfBoundsException e) {
return false;
}
}
现在,我知道我可以使用比较来检查值并查看该位置是否适合网格,但这更快,因为它不需要运行比较并且检查非有效位置的情况很远少数民族。 但是,这是我的问题:由于访问数组的行返回的值没有被分配或发送到方法,我收到有关AssignmentOperators的错误。我知道将它分配给临时值或通过一些无用的方法运行它将是一个简单的修复,但这两者似乎对我来说是derpy bandaid解决方案,我想知道是否有更清洁的方法来做到这一点。 (此外,前者引发了Eclipse的警告。)
无论如何,这是低优先级,但它让我感到烦恼的是,如此简单的事情在这样一个简单的实现中是不可能完全诚实的。谢谢!
答案 0 :(得分:2)
这更快,因为它不需要进行比较。
当然需要“进行比较”。它还有什么可能起作用?你在这一点上的推理是错误的。因此,你的问题无效。
答案 1 :(得分:1)
不幸的是,这就是Java的方式。从JLS第14.8节,表达式声明:
与C和C ++不同,Java编程语言只允许使用 表达式的形式,用作表达式语句。注意 Java编程语言不允许“转换为void” - void 不是一种类型 - 所以写一个表达式的传统C技巧 陈述如:
(无效)......; //不正确!不起作用。另一方面,Java 编程语言允许所有最有用的表达式 在expressions语句中,它不需要方法调用 用作表达式语句来调用void方法,所以这样一个 诀窍几乎从不需要。如果需要技巧,要么是 赋值语句(第15.26节)或局部变量声明 可以使用声明(第14.4节)。
目前尚不清楚他们为什么会这样做,但我的猜测是它的目的是减少错误。例如,如果有人意外写入a == b;
而不是a=b;
,则会导致编译错误。在极少数情况下,某人实际上想要这种行为,他们必须明确地将其分配给临时变量(或将其传递给方法或类似)。