[英]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.