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