java - 通过动态转换重载方法

标签 java overloading

我正在研究Java的方法重载。
采取下一个样本:

public static void main(String[] args) {
    Object object = "some String";
    System.out.println(object.getClass().getSimpleName());
    System.out.println(belongsToAllowedTypes(object.getClass().cast(object)));
    String string = "another String";
    System.out.println(belongsToAllowedTypes(string));
}

public static boolean belongsToAllowedTypes(Object value) {
    return false;
}

public static boolean belongsToAllowedTypes(String value) {
    return true;
}

我期待这样的输出:

String
True
True

只是因为我在调用该方法之前获取了 String 类并将 Object 转换为该类。
但运气不好,我在第二个 println 中得到了 false
因此它仍然被作为 Object 处理(但是类是 String)

如果我将其更改为:

System.out.println(belongsToAllowedTypes(String.class.cast(object)));

我确实得到了True

谁能解释一下这种行为吗?

最佳答案

要调用的方法是在编译时确定的。因此,object 的类型为 Object 的类型

object.getClass().cast(object))

在编译时是一个对象,独立于对象的动态内容。

关于java - 通过动态转换重载方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34893297/

相关文章:

java - 循环中的 repaint() 仅调用一次 - Java

c++ - 重载 lambda 函数

c++ - 重载大于有或没有友元的运算符

java - 迷宫 2D 递归算法问题

java - 比较两个不同字符串中的 Char 时遇到问题

java - 为什么这个 Spring Boot/Thymeleaf 按钮会隐藏我的数据或根本不起作用?

programming-languages - 按返回类型重载函数?

c++ - 使用 const 重载函数的行为

c++ - P1787中关于一组非静态成员函数是否可以重载的替代规则

java - 如何从eclipse调用servlet中的destroy()?