检查Object是否是List <object> </object>的实例

时间:2013-02-03 15:25:52

标签: java list generics

我有Object,有时会包含List<Object>。我想用instanceof进行检查,如果是,则添加一些元素。

void add(Object toAdd) {
    Object obj = getValue();
    if (obj instanceof List<?>) {
        List<?> list = obj;
        if (list instanceof List<Object>) {    // Error
            ((List<Object>) list).add(toAdd);
        } else {
            List<Object> newList = new ArrayList<Object>(list);
            newList.add(toAdd);
            setValue(newList);
        }
        return;
    }
    throw new SomeException();
}

它说我无法检查它是否是instanceof List<Object>,因为java不关心并删除<>中的类型。 这是否意味着我每次都必须创建新的ArrayList?或者有没有办法检查,例如。用反思?

1 个答案:

答案 0 :(得分:3)

我之前的回答是错的,因为我不完全理解你的要求。 如果你添加的项目是一个对象,只要你有一个列表的东西,你可以毫无问题地添加它。 您不必重新创建列表

void add(Object toAdd) {
    Object obj = getObject();
    if (obj instanceof List<?>) {
        ((List<Object>)obj).add(toAdd);
        return;
    }
    throw new SomeException();
}

<强>更新

作为几条评论的答案,将任何对象添加到列表中没有问题,并且在迭代之后找出它是什么类型的对象没有问题:

List<String> x1 = new ArrayList<String>();
Object c3 = x1;
x1.add("asdsad");
Integer y2 = new Integer(5);
if (c3 instanceof List<?>){
     ((List<Object>)c3).add((Object)y2);
}

for (Object i : (List<Object>)c3){
    if (i instanceof String){
        System.out.println("String: " + (String)i);
    }
    if (i instanceof Integer){
        System.out.println("Integer: "+ (Integer)i);
    }
}