私はJavaのReflectionで遊んでいます。私はコンストラクタを持つ抽象クラスBase
を持っています。リフレクトで抽象基底クラスからコンストラクタにアクセスする
abstract class Base {
public Base(String foo) {
// do some magic
}
}
さらに、いくつかのクラスがBase
に拡張されています。彼らは多くの論理を含んでいない。私はBase
のコンストラクタでそれらをインスタンス化したい、その派生クラスにプロキシコンストラクタを書く必要はありません。そして、もちろん、私はそれらの派生クラスをReflectionでインスタンス化したいと思います。と言う:
Class cls = SomeDerivedClass.class;
Constructor constr;
constr = cls.getConstructor(new Class[] { String.class }); // will return null
Class clsBase = Base.class;
constr = clsBase.getConstructor(new Class[] { String.class }); // ok
Base obj = (Base) constr.newInstance(new Object[] { "foo" }); // will throw InstantiationException because it belongs to an abstract class
私はBaseのコンストラクタでどのように派生クラスをインスタンス化できますか?またははとする必要があります。これらのダムプロキシコンストラクタを宣言しますか?
これらのクラスをインスタンス化する前に、すべてがコンパイルされていることを確認してください。 – gabuzo
はい、うまくコンパイルされます。これは簡単な例ですが、catch節が欠けていますが、基本的にこのコードはうまくコンパイルされます。ああ、 'Base'には空のデフォルトのコンストラクタが追加されています(javacはこれを主張しています)。 – craesh