【问题标题】:how to instantiate an object based on如何实例化一个对象
【发布时间】:2011-05-20 02:45:23
【问题描述】:

我想根据列表的类型(即卡车)实例化一个对象并添加到列表中,我在下面尝试了一些方法,但它警告我“sun.reflect.generics.reflectiveObjects.TypeVariableImpl 与 java 不兼容.lang.Class"

public <T extends Car> void addRow(List<T> list) {
Class<T> clazz = (Class<T>) ((ParameterizedType) list.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
T newInstance = clazz.newInstance();
list.add(newInstance);
}

方法调用:

List<Truck> abc = new ArrayList<Truck>;
addRow(abc);

有什么帮助吗?提前谢谢大家!

【问题讨论】:

    标签: java list generics


    【解决方案1】:

    由于类型擦除,您不能这样做。例如,参见this threadthis thread。您可以做的最好的事情是工厂类或将 Class 实例作为单独的参数传递:

    addRow(abc, Truck.class);
    

    更多关于类型擦除的信息可以在here找到。

    【讨论】:

      【解决方案2】:

      或者,如果您要创建所有类型,则可以创建一个类似于 clone() 的方法,但它会创建默认实例并覆盖所有类中的方法。

      【讨论】:

        猜你喜欢
        • 2014-10-31
        • 1970-01-01
        • 2012-01-13
        • 1970-01-01
        • 2020-10-20
        • 2018-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多