Iは、同じタイプ(タイプの特定のセットのいずれかとすることができるタイプ)の2つの値の組を表すクラスがありますJava Genericsの制限または誤った使用ですか?
public class Pair<E extends AClass>{
private E var1;
private E var2;
}
このクラスは、フレームワークによって使用されるので、それはないが必要されます
で:ここで多くの問題が明らかに存在する
public class Pair<E extends AClass>{ private E var1; private E var2; public Pair(){ var1 = invoke constructor of type E; var2 = invoke constructor of type E } }
:私が持っている-argumentコンストラクタは、2つの変数(VAR1、VAR2)をインスタンス化します私は何とかその正確な型を知って、その型のコンストラクタを呼び出さなければならない変数をインスタンス化するために、 var1がタイプEの宣言とIされているので、私は上記のように、私はいくつかの問題を持ってない場合でも
public Pair(){ if(var1 instanceof SpecificType1){ var1 = new SpecificType1(); var2 = new SpecificType2(); } }
:最良のケースでは、これは、コンストラクタ内の他のif文のようなものがかなり大きなを持つことを意味しSpecficType1をインスタンス化し、結果オブジェクトをvar1/var2に割り当てるときに、型の不一致エラーが発生します。それを動作させるためには、私はEにキャストする必要があります。
var1 = (E)new SpecificType1();
をしかし、私はジェネリック型に特定のタイプをキャストしようとしているとして、これは、コンパイル時の型チェックを破壊します。
これはJavaのGenericsの制限ですか、このシナリオはGenericsを使用すると悪いですか?
ジェネリックコンテナ内で 'instanceOf'を使用する必要がある場合は、設計に問題があります。 –
[Class.forName()](http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Class.html#forName%28java.lang.String%29)を試すと、 –
質問者への通知(編集者が質問者に通知しないので):あなたのケースで工場設計パターンを使用する方法を簡単なコードサンプルに追加しました – amit