如何编写将参数化类型中的泛型类型作为输入的方法?

How to write a method that takes as input a generic type within a parameterized type?

有人可以向我解释为什么这样可以吗:

    public static void main(String args[]) {
        List<Integer> integers = new ArrayList<>();
        test(integers);
    }

    public static void test(List list) {

    }

但这会在评论中造成错误:

    public static void main(String args[]) {
        List<List<Integer>> integers = new ArrayList<>();
        test(integers);
        //'test(java.util.List<java.util.List>)' cannot be applied to '(java.util.List<java.util.List<java.lang.Integer>>)'
    }

    public static void test(List<List> lists) {

    }

据我了解,在这两种情况下,程序都将参数化类型转换为泛型类型,但它只适用于第一种情况。为什么会这样,我该如何制作一个带有参数的方法,如第二个示例,可以将任何列表列表作为输入?

您要找的是

    public static <T> void test(List<List<T>> lists) {

    }

   public static void test(List<? extends List<?>> lists) {
   }

不要曾经 List 后面没有 <,导入时除外。它具有奇怪的属性并消除了类型安全性。 List<List> 会使编译器进入一种奇怪的状态,它试图获得某种级别的类型安全,而另一些则没有。