java - 我如何才能将 ArrayList<String> 插入到接受 List<Integer> 的构造函数中?

标签 java generics types constructor

<分区>

我有这门课:

public class TestSubject {
    public TestSubject(List<Integer> list) {
    }
}

我正在像这样实例化它并且不知何故它正在工作,即使我正在插入 ArrayList<String>进入接受 List<Integer> 的构造函数:

List<String> strings = new ArrayList<>();
strings.add("foo");
Constructor<TestSubject> constructor = TestSubject.class.getConstructor(List.class);
TestSubject test = constructor.newInstance(strings);

这是我在实例化后看到的:

enter image description here

这怎么可能?

另外,我如何从实例化代码中确定使用了正确类型的列表?

最佳答案

这是由于 type erasure 而发生的.作为<Integer>将被删除,它将是 List只要。但是,您正在使用反射创建实例,并且在运行时它不会检查 List 的类型.

如果您使用 new 创建列表,则在编译时检查列表的类型但在这种情况下,您跳过了编译时检查,并且在运行时由于类型删除而有效。

在您的情况下,除了在构造函数中手动检查元素类型外,没有其他直接方法。

关于java - 我如何才能将 ArrayList<String> 插入到接受 List<Integer> 的构造函数中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38980318/

相关文章:

java - JTextField 定位/布局问题

java - Selenium /页面工厂 : Find child elements using parent element's @FindBy?

java - 当我在 jscrollpane 上添加 jtable 时,水平滚动条不起作用

c# - C#/.Net 泛型如何知道它们的参数类型?

Java 泛型和原始类型

swift - Swift 中的空数组和泛型有什么用?

mysql - 对于一个或两个字符的字符串 : CHAR(2) or VARCHAR(2)? 哪个更有效

c++ - 从 unsigned int 到 float 的转换

scala - 通过在Scala中使用TypeTag实现多态返回类型

java - 使用 Spring 使用 JPA/Hibernate 向用户添加 Vehicle 的最简单方法