我知道周围有很多类似的问题,但我真的没有找到问题的有效答案。
我有一个抽象类Entity
。
然后我有两个类Biker
和Pedestrian
,两个类都延伸Entity
。
我需要对两个ArrayList
个类执行操作,
要这样做,我有一个方法
private void handleEntities(ArrayList<? extends Entity> entities) {...};
此方法应更新ArrayList
。
鉴于ArrayList<Biker>
和ArrayList<Pedestrian>
都可能为空,是否有办法获取该方法正在使用的两个类中的哪一个?我知道我可以将其他参数传递给该方法,我只想知道我是否可以执行entities.getObjectClass()
之类的操作,最终会返回Biker
或Pedestrian
。
提前谢谢!
修改 根据要求,用例:
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
}
答案 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。