簡體   English   中英

Java。 如何上投類型使用反射?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM