java - 错误的数据类型 - 泛型

标签 java generics

在下面的 Java 代码中:

import java.util.*;

public class TestGenericMethod {

public static <E> void ArrayToArrayList(E[] a, ArrayList<E> lst) {
    for (E e : a) lst.add(e);
}

public static void main(String[] args) {
    ArrayList<Integer> lst = new ArrayList<Integer>();
    Integer[] intArray = {55, 66};  // autobox
    ArrayToArrayList(intArray, lst);

    for (Integer i : lst) System.out.println(i);    
    String[] strArray = {"one", "two", "three"};

    //ArrayToArrayList(strArray, lst);   // Compilation Error
}
}

谁能解释一下编译器是如何知道这一行的:

ArrayToArrayList(strArray, lst);

抛出异常?

如果该方法接受通用类型的数据,为什么它接受整数数组而不接受字符串数组?

最佳答案

这不会编译,因为 ArrayToArrayList 需要一个数组和一个数组列表相同类型 (E):

public static <E> void ArrayToArrayList(E[] a, ArrayList<E> lst) {

您的注释掉的示例尝试使用 String 数组和 IntegerArrayList 来调用它。

以下编译:

      String[] strArray = {"one", "two", "three"};
      ArrayList<String> strLst = new ArrayList<String>();
      ArrayToArrayList(strArray, strLst);

关于java - 错误的数据类型 - 泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13594382/

相关文章:

java - 我可以在soap处理程序中获取Java类名吗?

java - 如何使用 SWIG 返回指向用户定义类对象的指针

Java 包未导入

java - 带有提供特定返回值的抽象方法的未经检查的强制转换警告

java - 使用具有下界通配符的增强 for 循环

android - 无法在 Kotlin 中制作通用项目

Java max文件缓存解决方案

使用键盘进行Java球碰撞检测

generics - 将泛型方法的实现移动到抽象父类(super class)

C++ 保留指向模板对象的指针集合,所有指针都派生自非模板类