![](/img/trans.png)
[英]“Warning: [unchecked] unchecked cast” when casting Object to ArrayList<String[]>
[英]Casting Object to List results in unchecked cast warning
我想將Object
List<IAnalysisData>
為List<IAnalysisData>
。 該對象已從數據庫中讀取。 但是,我收到一個煩人的警告,說演員表未經檢查。
private List<IAnalysisData> deserialize(byte[] bytes) throws IOException, ClassNotFoundException
{
List<IAnalysisData> analysisDataList = null;
ByteArrayInputStream in = new ByteArrayInputStream(bytes);
ObjectInputStream oos = new ObjectInputStream(in);
Object o = oos.readObject();
analysisDataList = (List<IAnalysisData>) o; //warning here
return analysisDataList;
}
投射對象的正確方法是什么?
編輯:我忘了提到IAnalysisData
是一個接口。 該實現稱為AnalysisData
。
我知道要修復類似問題的唯一方法是添加
@SuppressWarnings("unchecked")
即使您絕對“知道”這是安全的,也無法證明自己在做什么是真的安全。
所以看起來像
@SuppressWarnings("unchecked")
private List<IAnalysisData> deserialize(byte[] bytes) throws IOException, ClassNotFoundException
{
List<IAnalysisData> analysisDataList = null;
ByteArrayInputStream in = new ByteArrayInputStream(bytes);
ObjectInputStream oos = new ObjectInputStream(in);
Object o = oos.readObject();
analysisDataList = (List<IAnalysisData>) o; //warning here
return analysisDataList;
}
在那之后,您將不會在該方法中收到任何未經檢查的警告。
無法檢查強制類型轉換為泛型類型。 您可以使用instanceof
確認Object o
確實是List<?>
但不能確認它是List<IAnalysisData>
。 為了安全起見,您可以使用try / catch塊來捕獲ClassCastException
,但這仍然不會隱藏IDE警告。 就像安德魯所說的那樣,將@SuppressWarnings("unchecked")
放在該方法之上將單獨隱藏該方法的警告,但是從長遠來看,IDE警告@SuppressWarnings("unchecked")
沒有任何意義。
您的轉換語法很好。
您應該檢查analysisDataList
不為null
,這表示轉換成功。 這就是您的IDE告訴您的。
如果在多個地方使用它,請將其編碼為單獨的函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.