如何编写将参数化类型中的泛型类型作为输入的方法?
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>
会使编译器进入一种奇怪的状态,它试图获得某种级别的类型安全,而另一些则没有。
有人可以向我解释为什么这样可以吗:
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>
会使编译器进入一种奇怪的状态,它试图获得某种级别的类型安全,而另一些则没有。