使用动态转换重载方法

时间:2016-01-20 06:50:25

标签: 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强制转换为该类 但没有运气,我在第二个false得到println 所以它仍然被处理为Object(但类是String

如果我将其更改为:

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

我得到True

任何人都可以解释这种行为吗?

1 个答案:

答案 0 :(得分:3)

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

object.getClass().cast(object))
编译时

Object,与object的动态内容无关。