[英]Different behavior of java .cast method
我有这段代码(Child只是Object的空子)我不明白为什么最后一次调用没有给出与第二次调用相同的结果
感谢帮助
public class App {
void process(Object o) {
System.out.println("I have processed an object");
}
void process(Child c) {
System.out.println("I have processed a child");
}
public static void main (String[] args) {
Object o = new Child();
Class<?> cl = Child.class;
App app = new App();
app.process(o);
app.process(Child.class.cast(o));
app.process(cl.cast(o));
}
}
输出是
I have processed an object
I have processed a child
I have processed an object
很可能是因为cl
的静态类型是Class<?>
(实际上是Class<Object>
),而Child.class
的静态类型是Class<Child>
。 编译器选择仅基于它看到的静态类型调用的方法,而不是基于对象的实际类型。
所以声明你的变量为
Class<Child> cl = Child.class;
应该给你你想要的结果。
您应该使用Java反射来执行此操作
public static void main(String[] args) {
Object o = new Child();
App app = new App();
try {
Method m = App.class.getMethod("process", o.getClass());
m.invoke(app, o);
} catch (Exception e) {
e.printStackTrace();
}
}:
虽然你有一个Object容器,但输出现在是: 我已经处理了一个子容器
public T cast(Object obj) {
if (obj != null && !isInstance(obj))
throw new ClassCastException();
return (T) obj;
}
当写作时:
Class<?> cl = Child.class;
T由Object重新定义,因此返回(Object)obj;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.