例えば、ListのListで、中身はなんでもよい、みたいな場合があるとする。コードであらわすとこんな感じ。
List<List<?>> wildcardList;
これに、例えばIntegerのListのListを割り当てようとするとエラーになる。
List<List<?>> wildcardList = new ArrayList<List<Integer>>(); // コンパイルエラー // 型の不一致: ArrayList<List<Integer>> から List<List<?>> には変換できません
これを解消するには、境界型を使用して、
List<? extends List<?>> wildcardList = new ArrayList<List<Integer>>();
のように書くとよい。
参考: Java generics, nested collection of wildcard - Stack Overflow