3

重複の可能性:
Java: 既にクラスパスにあるクラス (およびその内部クラス) をロードする方法は?

getConstructor を使用して内部クラスのインスタンスを作成する方法を誰かが理解するのを手伝ってくれませんか。

これが私が今いるところです。

import java.lang.reflect.*;

public class Outer{
public Outer(int i){
//things to do
}
public class Inner{
Class<?>[] type = new Class<?>[1];
Class<?> myClass;
    public Inner(int i){
    //stuff and code
    }

    public void task(){
    type[0] = Integer.class;
    try{
        myClass = Class.forName("Outer$Inner");
        Constructor construct = myClass.getConstructor(type);
        Object i = construct.newInstance(new Integer(43));
    }
    catch(Exception e){
        e.printStackTrace();
    }
    }
}

public static void main(String[] args){
Outer outer = new Outer(new Integer(21));
Inner inner = outer.new Inner(new Integer(22));
inner.task();
}

}

エラー情報

java.lang.NoSuchMethodException: Outer$Inner.<init>(java.lang.Integer)
at java.lang.Class.getConstructor0(Class.java:2706)
at java.lang.Class.getConstructor(Class.java:1657)
at Outer$Inner.task(Outer.java:18)
at Outer.main(Outer.java:30)

明らかな何かが欠けている場合は申し訳ありません これを理解できれば、txtファイルから入力を取得し、文字列を使用してオブジェクトを作成したいと思います。

4

1 に答える 1

6

代わりに InnerClass を静的クラスに変更すると機能しますか?

通常、静的な内部クラスでない場合、内部クラスを作成するには外部クラスのコンテキストが必要です。Outer インスタンスをコンストラクターに渡す必要があると思います - 後ろからランダムな参照を引き出しましょう:

http://jroller.com/tomdz/entry/reflection_inner_classes

于 2010-12-18T05:41:13.333 に答える