【发布时间】:2021-11-20 20:17:33
【问题描述】:
所以我尝试了泛型(从一个迷你 C# 项目复制),现在有点傻眼了:
public static void main(String[] args) {
Main main = new Main();
// Strings
{
var array = new String[]{
"test", "ok", "dog house banana"
};
main.PrintGenericList(main.ConvertArrayToList(array));
}
// Integers
{
var array = new int[] {
55, 0, 100
};
main.PrintGenericList(main.ConvertArrayToList(array));
}
}
private <T> List<T> ConvertArrayToList(T[] pArray) {
return Arrays.asList(pArray);
}
private <T> void PrintGenericList(List<T> pList) {
for (T item : pList) {
System.out.println(item);
}
System.out.println();
}
我不明白为什么我不能在这里使用整数数组(即 ConvertArrayToList(myIntArray))。 返回的错误:
java:类 [已编辑] 中的方法 ConvertArrayToList。 Main 不能应用于给定类型;必需:T[] 找到:int[] 原因: 推理变量 T 具有不兼容的界限 等式约束:int 下界:java.lang.Object
【问题讨论】:
-
您可能需要使用
Integer[]而不是int[]。在 Java 中,泛型和原语不能很好地协同工作。虽然int可以自动装箱为Integer(反之亦然),但这不适用于数组。 -
Arrays.toList(new int[0])是List<int[]>,而不是List<Integer>。 -
顺便说一句,打印方法不需要类型变量:
List<?>和Object循环变量就足够了。
标签: java generics collections