[英]Java. How can I upcast type use reflection?
我有兩個類UpObj和DownObj
public class UpObj {
public UpObj() {
System.out.println("Load UpObj ");
}
}
public class DownObj extends UpObj {
public DownObj() {
System.out.println("Load DownObj ");
}
}
public class Caller {
UpObj obj;
public Caller(UpObj obj) {
this.obj = obj;
System.out.println("!!!");
}
}
public class GNUMakeFile {
/**
* @param args
*/
public static void main(String[] args) {
DownObj iView = new DownObj();
Class<?> iViewClass = iView.getClass();
Class<?> clazz;
try {
clazz = Class.forName("bla.bla.bla.Caller");
Constructor<?> ctor = clazz.getDeclaredConstructor(iViewClass);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
}
因此,我想在Caller構造函數中將我的孩子類型DownObj轉換為父UpObj。 我認為使用幫助泛型是可能的。 像這樣的東西。 任何人都知道這種用法的確切含義。
謝謝。
沒有標准的方法。 嘗試通過Google搜索一些解決方案,例如http://www.xinotes.org/notes/note/1329/或如何使用反射獲取參數類型? 。 我記得Spring和其他一些庫都具有類似的util函數。 你用彈簧嗎?
您實際上不應該將Class.getConstructor()
與要傳遞給它的運行時類型一起使用-該方法可以使用形式參數。
如果需要搜索與您擁有的某些對象匹配的構造函數,則必須遍歷getConstructors()
,檢查每個構造函數的形式參數,並使用Class.isAssignableFrom()
檢查是否找到了合適的簽名。 我認為沒有一種簡便的方法可以讓反射API為您執行重載解析。
(或者,重新考慮您的方法,因此不再需要將反射弄得一團糟。)
我不是很了解這個問題-通常不需要向上轉換。
但這似乎是問題在於獲取對象的上層階級,
如果使用getSuperclass
方法:
Constructor<?> ctor = clazz.getDeclaredConstructor(iViewClass.getSuperclass());
文檔: getSuperclass()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.