7

Objectたとえばにキャストすることは可能ですかArrayList<String>

以下のコードは、問題の例を示しています。問題は最後の行にあります

setDocs((ArrayList<Document>)obj);

Object objをキャストしたい場所ArrayList<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);

そのランタイム キャストは、ArrayListcontainsDocumentオブジェクトをチェックしないため、コンパイラは警告を発します。

于 2013-10-09T10:25:09.240 に答える
2

いいえ、Java でジェネリックがどのように実装されているかにより、それは不可能です。

型情報は実行時に利用できないため、 で確認できませんinstanceof

できることは、キャストしてからList、各要素が a であるDocumentかどうかを確認することです。

于 2013-10-09T10:22:17.493 に答える