簡體   English   中英

使用反射調用具有參數的Inner類方法

[英]Invoke Inner class method having parameters using reflection

我試圖測試我的代碼雖然知道使用反射不是一個好的測試方法。 我有一個外部類作為公共私有內部類具有公共方法,如下所示,

public class Outer {

    private class Inner {
        private int var = 1;

        public Inner(int a) {
            System.out.println("___");
        }

        public void test(int a) {
            System.out.println("Hey");
        }
    }
}

我的主要java類如下所示

main() {
    Outer b = new Outer();
    System.out.println(b);
    Class<?> innerClass = Class.forName("car.Outer$Inner");

    Constructor<?> constructor = innerClass.getDeclaredConstructor(Outer.class, 1);

    constructor.setAccessible(true);
    Object c = constructor.newInstance(b,b);

    Method method = c.getClass().getDeclaredMethod("test");
    method.setAccessible(true);
    method.invoke(c, 1);
}

這是投擲

線程“main”中的異常java.lang.NoSuchMethodException:car.Auter $ Inner.test()at java.lang.Class.getDeclaredMethod(Class.java:2130)at car.A.main(A.java:36)

如何使用反射調用內部類方法?

您需要在調用getDeclaredMethod()提供參數類。 當您調用getDeclaredMethod() ,第一個參數是您想要查找的方法的名稱,任何剩余的參數是您想要的方法的參數的類。 這就是getDeclaredMethod()區分重載方法名稱以獲取一個特定方法的方法。 由於您沒有提供其他參數,因此getDeclaredMethod()正在尋找一個名為test的方法,該方法不帶參數。 你得到一個例外,因為你在類Outer$Inner沒有這樣的方法。 你唯一的test方法是一個int參數`,所以下面應該做你想要的:

Method method = c.getClass().getDeclaredMethod("test", int.class);

這里, int.class是對應於原始參數類型intClass對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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