次のような Java コードに遭遇します。
public interface Foo<E> {}
public interface Bar<T> {}
public interface Zar<?> {}
上記の 3 つの違いは何ですか? また、Java ではこのタイプのクラスまたはインターフェース宣言を何と呼びますか?
ベストアンサー1
最初の 2 つには違いはありません。型パラメータ(E
またはT
) に異なる名前を使用しているだけです。
3 番目は有効な宣言ではありません。型引数を提供するときに使用されるワイルドカード?
として使用されます。たとえば、何らかの型のリストを参照することを意味しますが、それが何であるかはわかりません。List<?> foo = ...
foo
これらはすべてジェネリックであり、非常に大きなトピックです。もちろん、他にも利用できるリソースはありますが、以下のリソースを通じてジェネリックについて学ぶことをお勧めします。
- ジェネリックに関する Java チュートリアル
- ジェネリック医薬品の言語ガイド
- Javaプログラミング言語におけるジェネリック
- アンジェリカ・ランガーのJavaジェネリックに関するよくある質問(膨大かつ包括的ですが、あくまで参考程度に留めてください)