Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 动态浇铸重载方法_Java_Overloading - Fatal编程技术网

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

我正在研究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类并将对象强制转换到该类。
但是运气不好,我在第二个
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不是字符串。但这是编译与运行时的问题。皮蒂,因为这可能是一个美好的时刻。