次のように、同じ型の 2 つの変数を格納する非常に単純なジェネリック クラスを作成しました。
public MyClass<T>
{
private T v1;
private T v2;
public MyClass(T v1, T v2)
{
this.v1 = v1;
this.v2 = v2;
{
}
ここで、別の非ジェネリック クラスを介して、異なる型の Object リストを入力として取り、出力としてMyClass<T>
同じ型のペアを持つリストを与えるメソッドを実装する必要があります。
私の問題は、どのタイプを使用しているかを知らずにこのようなものを作成する方法がわからないことMyClass
です。毎回適切なタイプをインスタンス化するにはどうすればよいですか? 日食からエラーが発生することなく、ここまで来ました
public List<MyClass<?>> match()
{
List<MyClass<?>> list = new ArrayList<MyClass<?>>();
for(Object obj : this.list)//not the same list it's a parameter of the
{ //non-generic class
for(Object obj2 : this.list)
{
if(!(obj == obj2)&&obj.getClass().equals(obj2.getClass()))
{
MyClass<Object> couple = new MyClass<Object>(obj, obj2);
insertCouple(couple, list);
}
}
}
insertCouple
カップルが既に出力リストにあるかどうかを確認するプライベートメソッドです。実装しようとしComparable
ましMyClass
たが、コーディングがさらに複雑になりました。
ご覧のとおり、私はジェネリックのままでいることを余儀なくされていますが、問題があることがわかります。実行時に特定の型を見つけて埋める方法がない場合、ジェネリックを介してそれを可能にするためにどのように書く必要がありますか?