1. ホーム
  2. java

Java:型パラメーターを持つプライベートコンストラクターへのアクセス

2023-07-05 19:27:11

質問

これは javaのプライベートコンストラクタに関するこの質問 .

以下のようなクラスがあるとします。

class Foo<T>
{
    private T arg;
    private Foo(T t) {
        // private!
        this.arg = t;
    }   

    @Override
    public String toString() {
        return "My argument is: " + arg;
    }   
}

をどのように構築すればよいのでしょうか? new Foo("hello") をどのように構築するのでしょうか?

回答

ベースとなるのは jtahlborn の回答 を参考にすると、以下のようになります。

public class Example {
    public static void main(final String[] args) throws Exception {
        Constructor<Foo> constructor;
        constructor = Foo.class.getDeclaredConstructor(Object.class);
        constructor.setAccessible(true);
        Foo<String> foo = constructor.newInstance("arg1");
        System.out.println(foo);
    }   
}

どのように解決するのですか?

クラスを取得し、T の下限を持つ単一の引数 (この場合は Object) を取るコンストラクタを見つけ、そのコンストラクタに強制的にアクセスできるようにする必要があります (この例では setAccessible メソッドを使って)アクセス可能にし、最後に希望の引数でそれを呼び出します。