3

一般的な抽象化 (たとえばIterable<T>) の演算子として機能する関数型の静的ヘルパー メソッドを作成していますが、いつワイルドカードを使用する必要があるかについて少し混乱しています。次の場合の正しい、最もタイプ セーフで最も単純なメソッド シグネチャは何ですか? またその理由は何ですか?

  • プロパティの確認:

public static int size(Iterable<?> source)

対。

public static <T> int size(Iterable<T> source)

  • 変換:

public static <T> Iterable<T> take(Iterable<T> source, int count)

対。

public static <T> Iterable<T> take(Iterable<? extends T> source, int count)

  • 組み合わせる:

public static boolean elementsEqual(Iterable<?> first, Iterable<?> second)

対。

public static <T> boolean elementsEqual(Iterable<T> first, Iterable<T> second)

対。

public static <T> boolean elementsEqual(Iterable<? extends T> first, Iterable<? extends T> second)

4

1 に答える 1