java - 编译时的方法选择。如果参数可以有多种类型怎么办?

标签 java methods compilation runtime compile-time

我被引导相信 java 编译器在编译时完成了方法选择的所有工作(或者我错了吗?)。也就是说,它将在编译时通过检查类层次结构和方法签名来准确决定在哪个类中使用哪个方法。然后在运行时所需要做的就是选择要调用其方法的对象,这只能向上继承链。

如果是这样,它是如何工作的?

int action = getAction ();
StringBuilder s = new StringBuilder()
    .append("Hello ") // Fine
    .append(10) // Fine too
    .append(action == 0 ? "" : action); // How does it do this?

这里,参数的类型可以是Stringint。它如何在编译时决定应该调用 StringBuilder 的哪个方法?

最佳答案

一个表达式,例如

action == 0 ? "" : action

可以有一个单一的返回类型。编译器将其理解为返回 Object 实例的表达式。这在运行时可以是 StringInteger

在您的情况下,将调用 append(Object)。然后,StringBuilder 实现将在参数上调用 toString(),这将为您提供预期的结果("" 或转换为 String 的整数值)。

关于java - 编译时的方法选择。如果参数可以有多种类型怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8355245/

相关文章:

c# - 为什么在 finally 部分重置此变量时,在 try block 中返回变量不会更改返回值的值?

c++ - C/C++ 动态链接如何在不同平台上工作?

java - Jframe 未处理

java - 队列不循环,提前终止?

java - 不明白为什么子类必须显式调用有参数的基类构造函数

java - 将任何枚举传递给方法

java - 这两个程序的区别

java - 从 html 获取链接返回重复链接的方法

java - Java 中的 Do-While 循环

compilation - 用自身编译 CoffeeScript