0

私はある種のライブラリを書いています。そこに抽象クラスがあります。クライアントコードは、いくつかのメソッドを使用するように拡張する必要があります。ユーザーがアプリケーションを終了し、再起動した後、concrette クラスへの参照を復元する必要がある場合があります。私の考えは、ユーザーのクラスの正規名を保存してから、それを作成するnewInstance()ことでした。しかし、何らかの理由でインスタンスを作成できません。私はテストをしました:

void foo(AbstractClass a) {
    String classname = a.getClass().getCanonicalName();
    System.out.println(classname); //Output: "com.test.clientcode.Main.ConcretteClass"
    a = null; // here I lost my reference to ConcretteClass for example, so all I have is a classname
    Class.forName(classname).newInstance(); //Throws exception: "java.lang.ClassNotFoundException: `com.test.clientcode.Main.ConcretteClass"
}

これは、ライブラリ コード内のメソッドです。引数aとして、具体的なユーザー クラスのインスタンスを指定します。

更新:簡単にするために:私のライブラリには上記のようなメソッドがありaます.2行目の出力に見られるように、引数はクライアントの ConcretteClass への参照です。その後、参照を失います。ConcretteClass の正規名しか知らない場合、ConcretteClass の新しいインスタンスを作成するにはどうすればよいですか?

4

1 に答える 1