あなたはあなたのジェネリックを混乱させています。あなたがしたいことをする方法は
List<List<Object>> a = new ArrayList<List<Object>>();
ArrayListジェネリック パラメーター内でを使用することにより、オブジェクトのスコープを からListに絞り込みArrayList、ジェネリック シグネチャを変更します。ジェネリックの外側を使用することArrayListで、準拠したままになります。使用する の実装を指定していListて、それが保持するオブジェクトのタイプが であることがList<Object>、左側の状態とまったく同じです。
これが重要な理由を理解するには、次のリストを検討してください。
// Invalid declaration, but pretend it is valid
List<List<Object>> a = new ArrayList<ArrayList<Object>>();
a.add(new ArrayList<Object>()); // valid
a.add(new LinkedList<Object>()); // not valid because it's not an ArrayList;
// but according to the left side, it is valid!
もちろん、最善の方法は、Java 7 のダイヤモンド演算子を使用することです。
List<List<Object>> a = new ArrayList<>();