Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将对象强制转换为列表会导致未选中强制转换警告_Java_Casting - Fatal编程技术网

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它只适用于下面的代码块。一定要在答案中写上:它会比我的好。