Enumeration <に違いはありますか? ZipEntry >およびEnumeration <ZipEntry>を拡張しますか?もしそうなら、違いは何ですか?列挙型の違い<? ZipEntry>とEnumeration <ZipEntry>を拡張しますか?
答えて
タイプパラメータが「出力」位置でのみ使用されるため、それらのいずれかを取得したときにできることに関しては、実際の違いはありません。一方で、をとして使用することができる点で大きな違いがあります。
Enumeration<JarEntry>
があるとします。Enumeration<ZipEntry>
を引数の1つとするメソッドに渡すことはできませんでした。 はとなりますが、方法はEnumeration<? extends ZipEntry>
となります。
入力位置と出力位置の両方でタイプパラメータを使用するタイプがあると、より面白いでしょう - List<T>
が最も明白な例です。ここでは、パラメータのバリエーションを持つメソッドの3つの例を示します。いずれの場合も、リストからアイテムを取得し、別のアイテムを追加しようとします。
// Very strict - only a genuine List<T> will do
public void Foo(List<T> list)
{
T element = list.get(0); // Valid
list.add(element); // Valid
}
// Lax in one way: allows any List that's a List of a type
// derived from T.
public void Foo(List<? extends T> list)
{
T element = list.get(0); // Valid
// Invalid - this could be a list of a different type.
// We don't want to add an Object to a List<String>
list.add(element);
}
// Lax in the other way: allows any List that's a List of a type
// upwards in T's inheritance hierarchy
public void Foo(List<? super T> list)
{
// Invalid - we could be asking a List<Object> for a String.
T element = list.get(0);
// Valid (assuming we get the element from somewhere)
// the list must accept a new element of type T
list.add(element);
}
詳しくは、読み取り:
はい、直sun generics tutorialsのいずれかから:
ここでShapeは、円、矩形、 、Triangleの3つのサブクラス を持つ抽象クラスです。
public void draw(List<Shape> shape) { for(Shape s: shape) { s.draw(this); } }
それは引き分け() メソッドのみ 形状のリストに呼び出すことができるし、リスト上で呼び出すことができないことは注目に値する 例えば円、矩形、三角形の 。
public void draw(List<? extends Shape> shape) { // rest of the code is the same }
を今、あなたはちょうど行って、私たちはC#の世界ではオーバーよかった何かを思い出させました:メソッドは、形状のいずれかの種類を受け入れる 有するためには、次のように書かれて する必要があります。 Logic and its application to Collections.Generic and inheritance
その選択されている:
- Contravariance and Covariance in C#(コードのリンクが提供以外の
は、この質問への回答では、このトピックに関連してC#とJavaのに関するいくつかの良いリンクがありますC#は固有のものであり、理論的な構文は[まだ]存在しないため、非常によく、一般的にトピックをカバーしています。)
- Java generics and the covariance and contravariance of arguments
- Java generics tutorial FRオムサン。
- 1. 列挙型<?拡張インターフェース>
- 2. ジェネリックとクラス<?列挙型<?>>、class.getEnumConstants対EnumSet.allOf(クラス)()拡張
- 3. 列挙型の拡張
- 4. 列挙型拡張メソッド
- 5. 列挙<>列挙差
- 6. 列挙型のサイズ<String>
- 7. F#で列挙型を拡張する
- 8. 列挙型と辞書<列挙型、動作>
- 9. Scalaで既存の列挙型オブジェクトを拡張するには?
- 10. フラグと<<列挙型の操作? [OK]をC#の
- 11. ostreamと列挙型で<<をオーバーロードする
- 12. 列挙型を拡張できますか?
- 13. 拡張メソッドと列挙
- 14. 別のファイルにインポートされた列挙型を拡張して、私は<strong>異なるファイル</strong>にインポート列挙型を拡張しようとしているそれを
- 15. 別のtypdef列挙型の拡張である列挙型をtypdefできますか?
- 16. 列挙型の列挙型の列挙型へのアクセス
- 17. 拡張子内で文字列として列挙型を使用する
- 18. は、なぜ、すべての列挙型は、列挙型<e>
- 19. JavaからC#へのループの列挙<Integer>を変換しますか? C#でEnumeration <Integer>とは何ですか?
- 20. これは何を意味するのですかList <Class <?データ型>>を拡張しますか?
- 21. 私は<code>Enum</code>持つ列挙型インスタンス
- 22. リスト<? Base> VS Listを拡張します<Base>
- 23. Func <繰返し列挙型を作成するには<T>>
- 24. Scala列挙型で間違った(?)型の一致
- 25. 抽象クラスを列挙型に拡張 - ストラテジックパターン
- 26. ベクトル、行列、および配列データ型の違いは何ですか? <code>vector</code>、<code>matrix</code>と<code>array</code>:
- 27. Dapperの拡張dbConnection.Get <Object>と
- 28. Java:列挙型と値クラスの違いは何ですか?
- 29. スカラの列挙型
- 30. DBの列挙型または列挙型の列挙型
ZipEntrySubclassはJarEntry(ZipFile.entriesがワイルドカードを使用する理由)のようですか? –
ありがとうTom - 私の答えを編集します:) –