Java 将对象强制转换为列表会导致未选中强制转换警告
我想将Java 将对象强制转换为列表会导致未选中强制转换警告,java,casting,Java,Casting,我想将对象强制转换为列表。 该对象是从数据库中读入的。然而,我得到了一个恼人的警告,说演员阵容未经检查 private List<IAnalysisData> deserialize(byte[] bytes) throws IOException, ClassNotFoundException { List<IAnalysisData> analysisDataList = null; ByteArrayInputStream in = new Byte
对象
强制转换为列表
。
该对象是从数据库中读入的。然而,我得到了一个恼人的警告,说演员阵容未经检查
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;
}
私有列表反序列化(字节[]字节)引发IOException,ClassNotFoundException
{
List analysisDataList=null;
ByteArrayInputStream in=新的ByteArrayInputStream(字节);
ObjectInputStream oos=新ObjectInputStream(in);
对象o=oos.readObject();
analysisDataList=(List)o;//此处出现警告
返回分析数据列表;
}
投射对象的正确方式是什么
编辑:我忘了提到,
IAnalysisData
是一个接口。该实现称为AnalysisData
您的强制转换语法很好
您应该检查analysisDataList
是否为null
,这表示强制转换成功。这就是IDE告诉您的
如果您在多个位置使用它,请在单独的函数中对其进行编码。我所知道的解决类似问题的唯一方法是添加
@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;
}
@SuppressWarnings(“未选中”)
私有列表反序列化(字节[]字节)引发IOException,ClassNotFoundException
{
List analysisDataList=null;
ByteArrayInputStream in=新的ByteArrayInputStream(字节);
ObjectInputStream oos=新ObjectInputStream(in);
对象o=oos.readObject();
analysisDataList=(List)o;//此处出现警告
返回分析数据列表;
}
之后,在该方法中不会出现未选中的警告 无法将强制转换检查为泛型类型。您可以使用
instanceof
确认对象o
确实是列表
,但无法确认它是列表
。为了安全起见,您可以使用try/catch块捕获ClassCastException
,但这仍然不会隐藏IDE警告。正如Andrew所说,将@SuppressWarnings(“unchecked”)
放在方法上方将仅隐藏此方法的警告,但是IDE警告从长远来看几乎没有任何意义。好吧,如果我只是一个警告,那么问题出在哪里?它有用吗?如果是的话,在我看来,那完全没关系。我总是这样投。如果有更好的解决办法,也请告诉我,但我看这里没有任何问题。@Loki啊,好的,谢谢。我担心我做错了,因为我收到了ide(intellij)的警告。回答很好,但是你如何重新打开检查,或者它只适用于下面的代码块?@Bathsheba它只适用于下面的代码块。一定要在答案中写上:它会比我的好。