我正在研究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
。
任何人都可以解释这种行为吗?
答案 0 :(得分:3)
调用方法在编译时确定。因此,object
类型为Object
object.getClass().cast(object))
编译时是Object
,与object
的动态内容无关。