动态转换的方法重载
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
的动态内容。
我正在研究 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
的动态内容。