2011-07-16 20 views
1

2つのジェネリックタイプを持つJavaクラスを作成したいとします。2種類の汎用クラス

public class BinaryContractInfo<T, U> 

事は、私がUTまたはT[]同じタイプのいずれかになりたいということです。

基本的に私はT extends T[]かその逆を知りたいと思います。それから私は何かをすることができる

public class BinaryContractInfo<T, U extends T[]> 

それは可能ですか?それを行う方法はありますか?

+0

なぜこれをしたいのですか?申し訳ありませんが、それは私に論理的な意味を持っていません。この背後にある理由についての詳しい情報を教えてください。 –

+0

私は2つのタイプを比較しなければならないでしょう。 –

+0

単純に1つのジェネリック型を使用し、メソッドオーバーロードを使用できますか?1つはパラメーターとして型を受け入れ、もう1つは型の配列を受け入れますか? 2つのメソッド内のコードは異なるため、最初にやろうとしていることに対して何の利点もありません。 –

答えて

3

あなたが使用できる代わりにTまたはT[]のいずれかであることなどの種類は、あなたが

public T[] method(); 
を指定することができ、戻り値の型についてはどちらか

method(t); 
method(t1, t2, t3); 
T[] ts = 
method(ts); 

呼び出すことができます

public void method(T... ts); 

を可変引数に指定することはできません

発信者が返品が1つしかないと仮定した場合値

T t = method()[0]; 
1

ありませんが、私の知る限り、あなたは配列やジェネリック医薬品が一緒にうまく再生されないことはもちろんのこと、それを行うことはできません。最も簡単なことは、コレクション型(Listまたは非常にの薄いラッパー)で配列をラップすることです。

さらに、別のタイプパラメータを使用する代わりにT[]をコード内で直接使用しないでください。あなたができないなら、なぜあなたができないのか説明してください。

+0

です。これは 'T'でもいいし、' T [] 'でもないからです。 –

+0

したがって、 'T'と' T [] 'との間の差異を抽象化し、' T'型のvarargsを受け入れる新しい型を作成しますか?また、お客様の質問をクライアントコード、つまりバイナリ契約をどのように使用するかを示すサンプルスニペットで更新できますか? –