0

おはようございます、私はいくつかのJavaコードに取り組んでおり、そのようなものを作りたいと思います。

public class MyClass <E, T extends MyInterface<T<E>>> { } 

このように、Tは、MyInterfaceを実装するクラスのジェネリックとインスタンスの両方であり、タイプEのパラメトリックである必要があります。しかし、Javaでは不可能であるか、問題に対する私のアプローチが間違っている可能性があります。前もって感謝します。

アップデート:

まず最初に、返信してくれたすべての人に感謝します。今は、物事を明確にし、私が達成しようとしていることを理解してもらうために、汎用TDAの汎用コンテナを作成したいと思います。したがって、整数に基づくスタックのコンテナが必要だとすると、次のように記述する必要があります。MyContainer、もちろん、挿入部分の型を分離しておく必要があります。そうでない場合は、MyContainer>と書くことができます。さらに、すべてのTDAがMyInterfaceを実装しているので、これもバインド済みとして設定したいと思います。だから私は推測します

public class MyContainer < E, T extends MyInterface < E>> 
トリックを行う必要があります。

4

4 に答える 4

1

基本的に、あなたはこのようなことをしようとしています:

class MyClass<T<E>> // T has to be a generic class

またはこれ:

class MyClass<T<Integer>> // T has to be a generic with Integer as parameter

それは無意味なので、あなたはそれをすることはできませんし、するべきではありません。Tについて有用なことは何も教えてくれません。次のようにTとして任意のクラスを使用できます。

DummyClass<T> extends Anything {};
MyClass<DummyClass<Integer>> myClass;
于 2012-06-13T11:13:45.457 に答える
1

これは意味がありません。

public class MyClass <E, T extends MyInterface<T<E>>> { } 

右端のTのため。クラスをそれ自体でパラメーター化するのはなぜですか。私はあなたが本当に意味しているのはこれだと思います:

public MyClass<E, T extends MyInterface<E>>

つまり、基本的に、すべてのMyClassに対して、Eと、Eで動作するようにパラメーター化されたTMyInterfaceインスタンスが必要です。

初心者はジェネリックスに非常に夢中になり、コードが完全に読めなくなる可能性があることがわかりました。ジェネリックスは慎重に使用し、特定のインスタンスごとに本当に必要かどうかを検討してください。ネストされたジェネリックスのパラメーター化の複数のレベルでコードを記述していることに気付いた場合は、おそらく設計の面で何か間違ったことをしていることになります。

于 2012-06-13T11:04:22.887 に答える
0

そうあるべきだと思われる

public class MyClass <E, T extends MyInterface<E>> { } 

持つpublic class MyClass <E, T extends MyInterface<T<E>>> { }

という意味ですT

MyInterface<MyInterface<E>>可能性が低いと思われるものであるべきです。

編集:

したがって、必要MyInterface<Class1<Class2>>な場合は、次のようになります。

public class MyClass <A, B extends SomeClass<A>, C extends MyInterface<B> { }

また

public class MyClass <E, T extends MyInterface<SomeOtherClass<E>>> { }
于 2012-06-13T10:48:27.657 に答える
0

それがあなたの望むものかどうかはわかりませんが、そうなる可能性があると思います

MyClass<E, T extends MyInterface<E>>

T<E>私にはあまり意味がありません。

于 2012-06-13T10:49:29.340 に答える