我有一个观察者期望来自可观察的两个可能的对象:List<Cat>
或List<Orange>
,互斥。我如何区分传递给哪种数据类型
update(Observable observable, Object data)
?由于运行时类型擦除,我无法使用if(data instanceof List<Cat>)
答案 0 :(得分:2)
获取List
中的第一个元素(假设不为空)并测试检索到的元素的类型。您可以使用instanceof
运算符来查看对象是否在所需类的类层次结构中,但如果您想要更准确的测试,请使用getClass().equals(YourClass.class)
。
public void foo(List<Object> list) {
if (!list.isEmpty()) {
Object object = list.get(0);
//using instanceof
if (object instanceof Cat) {
}
if (object instanceof Orange) {
}
//using getClass().equals
if (object.getClass().equals(Cat.class)) {
}
if (object.getClass().equals(Orange.class)) {
}
}
}
答案 1 :(得分:1)
我知道这不是真正想要的东西,但我认为这可能会有所帮助。 Wrapers可以在这种情况下提供帮助。你可以创建两个Class和一个接口:
interface SpecialList<T> {
T get(int i);
void add(T item);
}
class CatList implements SpecialList<Cat> {
private List<Cat> list;
...
}
class OrangeList implements SpecialList<Orange> {
private List<Cat> list;
...
}
然后Observable可以返回一个SpecialList对象。在这种情况下,instance of
将起作用。