可以将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);
}
答案 0 :(得分:6)
在Java中,泛型不具体化,即在转换时不使用它们的泛型类型。
所以这段代码
setDocs((ArrayList<Document>)obj);
将以
执行setDocs((ArrayList)obj);
由于运行时强制转换不会检查ArrayList
包含Document
个对象,编译器会发出警告。
答案 1 :(得分:2)
不,由于Java中如何实现泛型,这是不可能的。
类型信息在运行时不可用,因此instanceof
无法检查。
您可以做的是投放到List
,然后检查每个元素是否为Document
。