一般的な抽象化 (たとえば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)