オブジェクトを渡さずに型パラメーターをインスタンス化する

StackOverflow https://stackoverflow.com/questions/1821966

  •  10-07-2019
  •  | 
  •  

質問

私の質問は、これの質問と非常によく似ています。 typeパラメーターtypeのオブジェクトをインスタンス化できるようにしたいだけでなく、「factory」を渡す必要もありません。すべてを1つのクラスに含める必要があります。

public class myClass<E> {
    E someObject;

    public myClass(){
         someObject = new E();
    }
}

以前のソリューションでは、myClassのコンストラクターを変更してファクトリパラメーターを設定し、そのコンストラクターを呼び出す必要がありましたが、私の目的では、外部からmyClassの呼び出しを変更したくありません。

役に立ちましたか?

解決

問題は、 E が何であるか、またその構築方法がわからないことです。どのタイプでも構いません(普遍的に定量化された)。 E が何であれ、実際に構築できるという証拠を提供する必要があります。 「工場」与えられたタイプの証言は、それができるという事実の証人の役割を果たします。

これについて少し考えてみましょう: E パラメータとして Void を渡すとどうなりますか? Void型の値をどのように構築しますか?

すべての E に対して E を構築できるのは、何もないところから何かを作成するようなものです。それは論理的に不可能です。 <コード>∀E。 E は無人のセットです。

本当に必要なのは、 E にバインドするか、 E がセットに含まれていることの証人としてコンストラクター(工場)を渡すことです。構築可能なオブジェクトの。

他のヒント

いいえ、リンクされた質問への回答で説明されているように、それはできません。ファクトリオブジェクトを渡すようにインターフェイスを変更します。 (注: Class は悪いファクトリになります。)

コードが機能しないことがわかっているので、十分に近い構文のソリューションを期待しています。

これはどうですか?

//doesn't work. cannot make x.someObject a new String()
//MyClass<String> x = new MyClass<String>();

//this can work...
MyClass<String> x = MyClass.neu(String.class);

public class MyClass<E>
{
    static public <T> MyClass<T> neu(Class<T> clazz){...}
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top