Java 为什么是ArrayList<;T>;可以分配给ArrayList<;整数>;

Java 为什么是ArrayList<;T>;可以分配给ArrayList<;整数>;,java,generics,Java,Generics,为什么ArrayList可以分配给ArrayList 这是因为您提供了显式类型转换 您可能无法理解的是ArrayList list如何容纳qwert。同样,这是因为您要求编译器信任您,所以您将Integer放入其中 最后,当涉及到运行时时,所有类型信息都将被删除。您需要了解。返回(ArrayList)字符串的概念; 这里,字符串ArrayList不是直接转换为整数ArrayList,而是转换为T ArrayList。根据文档中的“目标类型推断”: return (ArrayList<T&

为什么
ArrayList
可以分配给
ArrayList

这是因为您提供了显式类型转换

您可能无法理解的是
ArrayList list
如何容纳
qwert
。同样,这是因为您要求编译器信任您,所以您将
Integer
放入其中

最后,当涉及到运行时时,所有类型信息都将被删除。您需要了解。

返回(ArrayList)字符串的概念;
这里,字符串ArrayList不是直接转换为整数ArrayList,而是转换为T ArrayList。根据文档中的“目标类型推断”:

return (ArrayList<T>) strings;
静态列表emptyList();
List listOne=Collections.emptyList();
此语句需要列表的一个实例;此数据类型是目标类型。因为方法emptyList返回一个List类型的值,所以编译器推断类型参数T必须是值字符串


我建议您阅读。使用
(casting)
就像告诉编译器“相信我,我知道我在做什么”。当存在一些安全的强制转换场景时,编译器不会抱怨,之后的一切都是程序员的错。这里的强制转换很糟糕。问题是,强制转换告诉编译器“我比你知道得多,所以请将其视为整数数组,即使它不是”编译此代码时,Java编译器会发出未检查强制转换警告。所以编译器毕竟会发出警告。
[qwert]
1
return (ArrayList<T>) strings;
static <T> List<T> emptyList();
List<String> listOne = Collections.emptyList();