14
私は3つの方法があります:ジェネリック
//1 -- check one item
public static <T> void containsAtLeast(String message,
T expectedItem,
Collection<? extends T> found) {
if (!found.contains(expectedItem))
Assert.fail("...");
}
//2 -- check several items
public static <T> void containsAtLeast(String message,
Collection<? extends T> expectedItems,
Collection<T> found) {
for (T exptetedItem : expectedItems)
containsAtLeast(message, exptetedItem, found);
}
//3 -- check several items, without message parameter
public static <T> void containsAtLeast(Collection<? extends T> expectedItems,
Collection<? extends T> found) {
containsAtLeast(null, expectedItems, found);
}
を私は方法が//2
を呼び出す//3
が、それは、それは方法//1
を起動していないことを期待します。私が期待していることに間違いはありますか?
*私は、SDK 1.7.0_25を使用し、4.3 *
さらに、「T」はこの場合はメソッドごとの型パラメータであるため、3つの宣言はすべて基本的に互いに独立しています。 –
しかし、なぜ最初のメソッドが呼び出されたのですか? '\\ 1'の' T 'が '\\ 3'の' Collection extends T> 'と同じ場合、' \\ 1'の 'found'は' Collection <? 'コレクション extends T>>' '\\ 3'を拡張しますか?どこが間違っていますか? –
@assylias:ありがとうございます:私はこの細部を見落としました。 - ''を '// 2 'に' found'に追加すると、期待通りに動作します – Ralph