Java 动态浇铸重载方法
我正在研究Java的方法重载。Java 动态浇铸重载方法,java,overloading,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
采取下一个样本:
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类并将对象强制转换到该类。但是运气不好,我在第二个
println
中得到了false
因此它仍然被处理为
对象
(但是类是字符串
)
如果我将其更改为:
System.out.println(belongsToAllowedTypes(String.class.cast(object)));
我确实得到了一个True
有人能解释这种行为吗?要调用的方法是在编译时确定的。因此,对于
object
具有类型object
的
object.getClass().cast(object))
编译时是一个
对象
独立于对象的动态内容
要调用的方法在编译时确定。因此,对于object
具有类型object
的
object.getClass().cast(object))
编译时是一个
对象
独立于对象的动态内容
当您使用getClass时,它返回一个Class@matt在运行时,我确实得到类,否则simpleName不是字符串。但这是编译与运行时的问题。Pitty,因为有时候拥有它会很好。当你使用getClass时,它会返回一个Class@matt在运行时,我确实得到类,否则simpleName不是字符串。但这是编译与运行时的问题。皮蒂,因为这可能是一个美好的时刻。