获取类型“?”在ArrayList <! - ?扩展类 - >

时间:2016-04-22 21:36:21

标签: java arraylist

我知道周围有很多类似的问题,但我真的没有找到问题的有效答案。

我有一个抽象类Entity。 然后我有两个类BikerPedestrian,两个类都延伸Entity

我需要对两个ArrayList个类执行操作, 要这样做,我有一个方法

private void handleEntities(ArrayList<? extends Entity> entities) {...};

此方法应更新ArrayList

鉴于ArrayList<Biker>ArrayList<Pedestrian>都可能为空,是否有办法获取该方法正在使用的两个类中的哪一个?我知道我可以将其他参数传递给该方法,我只想知道我是否可以执行entities.getObjectClass()之类的操作,最终会返回BikerPedestrian

提前谢谢!

修改 根据要求,用例:

private void handleEntities(ArrayList<? extends Entity> entities) {
    // an hypothetical switch case
    if (entities.getObjectClass().toString() == Biker.class.getSimpleName())
        // add element to Biker ArrayList
    else if (entities.getObjectClass().toString() == Pedestrian.class.getSimpleName())
        // add element to Pedestrian ArrayList
}

2 个答案:

答案 0 :(得分:2)

如果列表为空,这几乎是不可能的。

阅读有关详细信息的删除信息。

答案 1 :(得分:0)

对于使用泛型定义的类,例如:

class <T> myClass

在构造函数中,您可以定义一个类classType引用,然后在保存ArrayList时可以与instanceOf,.getClass()等一起使用。

try {
    classType = (Class<T>)
                ((ParameterizedType) getClass().getGenericSuperclass())
                        .getActualTypeArguments()[0];
} catch (ClassCastException cce) {
        classType = (Class<T>) getClass().getGenericSuperclass();
}

一种更简单的方法可能是让BaseClass定义一个类getClassRef(),它返回Biker.class或Pedestrian.class。