这个问题基于Android场景,但通常适用于Java。

在Android中,ContentValues类具有许多put()方法,包括:

put(String key, Float value)
put(String key, Integer value)

我们的代码有:
contentValues.put(myKey, myCondition ? Utils.getFloat(something) : Utils.getInt(something));

我们已经观察到,执行此操作时,始终会调用put(String key, Float value)。即使由于不满足myCondition,三元运算符解析为整数值,也会发生这种情况。

在我们的例子中,用if-else替换它可以解决问题。我真的是想解释一下虚拟机何时以及如何选择要执行的方法。

如果已经回答过,请将其标记为重复。提前致谢!

最佳答案

方法重载在编译时解决,而不在运行时解决。三元表达式的类型是Number-大概有put(String key, Number value)方法或put(String key, Object value)方法。编辑:我被告知实际上是被强制浮动的。 JLS describes this in more detail

其他语言可以执行来解决运行时的重载。此功能被称为double-dispatch,因为方法是首先按参数类型然后按自身类型双重分派的。

09-30 15:40
查看更多