动态转换的方法重载

Method overloading with dynamic casting

我正在研究 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

只是因为我在调用该方法之前获取了字符串 class 并将对象转换为 class。
但运气不好,我在第二个 println.
中得到 false 所以它仍然被处理为 Object(但是 class 是 String

如果我将其更改为:

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

我得到了 True.

谁能解释这种行为?

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

object.getClass().cast(object))

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