7

是否可以投射Object到例如ArrayList<String>

下面的代码给出了一个问题的例子。问题在最后一行

setDocs((ArrayList<Document>)obj);

我想在哪里Object objArrayList<String>

public void setValue(Object obj)
    {
        if(obj instanceof TFile)
            setTFile((TFile)obj);
        else
            if(obj instanceof File)
                setFile((File)obj));
            else
                if(obj instanceof Document)
                    setDoc((Document)obj);
                else
                    if(obj instanceof ArrayList)
                        setDocs((ArrayList<Document>)obj);

    }
4

2 回答 2

9

在 Java 中,泛型没有具体化,即在强制转换时不使用它们的泛型类型。

所以这段代码

setDocs((ArrayList<Document>)obj);

将被执行为

setDocs((ArrayList)obj);

由于该运行时强制转换不会检查您的ArrayList包含Document对象,因此编译器会发出警告。

于 2013-10-09T10:25:09.240 回答
2

不,这是不可能的,因为泛型是如何在 Java 中实现的。

类型信息在运行时不可用,因此无法通过instanceof.

您可以做的是转换为List然后检查每个元素是否为 a Document

于 2013-10-09T10:22:17.493 回答