gpt4 book ai didi

java - 如何基于列表的最后一个节点(未知类型)创建对象并添加到列表的最后一个?

转载 作者:行者123 更新时间:2023-11-30 11:53:56 26 4
gpt4 key购买 nike

我在下面尝试类似的操作,但编译器警告我此类型不适用于该参数...我知道它不是类型安全的,但还有其他方法吗?

public void addRow(List<? extends Car> list){
list.add( list.get(list.size()-1).getClass().newInstance() );

最佳答案

为了看清问题,我们把有问题的方法展开如下:

public <T extends Car> void addRow(List<T> list) throws InstantiationException,
IllegalAccessException {
T element = list.get(list.size() - 1);
Class<T> clazz = element.getClass(); // Compilation Error Here!
T newInstance = clazz.newInstance();
list.add(newInstance);
}

getClass()返回 Class<? extends Car> .编译器不够聪明,无法知道通配符 (?) 是否匹配 T。 .程序员可以断言该赋值实际上是安全的:

public <T extends Car> void addRow(List<T> list) throws InstantiationException,
IllegalAccessException {
T element = list.get(list.size() - 1);
@SuppressWarnings("unchecked")
Class<T> clazz = (Class<T>) element.getClass();
T newInstance = clazz.newInstance();
list.add(newInstance);
}

当然,现在类型安全的责任在于程序员。不要忘记,即使今天它可能是安全的,但 future 的代码更改可能会使断言无效。

关于java - 如何基于列表的最后一个节点(未知类型)创建对象并添加到列表的最后一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6003651/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com