这个问题基于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,因为方法是首先按参数类型然后按自身类型双重分派的。