Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.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 避免使用诸如';ArrayList';;改用接口(序列化问题)_Java_List_Serialization_Arraylist_Interface - Fatal编程技术网

Java 避免使用诸如';ArrayList';;改用接口(序列化问题)

Java 避免使用诸如';ArrayList';;改用接口(序列化问题),java,list,serialization,arraylist,interface,Java,List,Serialization,Arraylist,Interface,请注意,这不是“针对接口的程序”类型的问题 我开始避免使用像“ArrayList”这样的实现类型;使用ArrayList时,请在PMD中使用接口。我理解为什么我会得到它,但在这种情况下,我不能使用List,因为List是不可序列化的,但是ArrayLists是 除了停用PMD检查,我还有其他选择吗?解决问题的一个方法是使用泛型,而不是显式指定ArrayList 而不是写: public byte[] doSomething(final ArrayList<?> serializabl

请注意,这不是“针对接口的程序”类型的问题

我开始避免使用像“ArrayList”这样的实现类型;使用ArrayList时,请在PMD中使用接口。我理解为什么我会得到它,但在这种情况下,我不能使用List,因为List是不可序列化的,但是ArrayLists是


除了停用PMD检查,我还有其他选择吗?

解决问题的一个方法是使用泛型,而不是显式指定
ArrayList

而不是写:

public byte[] doSomething(final ArrayList<?> serializableList) {
    serializableList.add(getSomeObject()); // List.add()
    return SerializationUtils.serialize(serializableList); // Serializable
}
public byte[]doSomething(最终ArrayList serializableList){
serializableList.add(getSomeObject());//List.add()
返回SerializationUtils.serialize(serializableList);//Serializable
}
你可以写:

public <T extends List<?> & Serializable> byte[] doSomething(final T serializableList) {
    serializableList.add(getSomeObject()); // List.add()
    return SerializationUtils.serialize(serializableList); // Serializable
}

公众不相信这一点。序列化发生在运行时,因此编译时类型实际上并不相关。将写出运行时类型,并反序列化正确的类型。它不是序列化isue。如果实际类型是可序列化的,则没有问题。@BoristheSpider如果什么是二进制的呢?“太早”是什么意思?你在说什么?@Boristeider这一次并不比上次更有趣,那次你一再否认引用官方文件。你现在所做的完全让我失望。请停下来。@EJP我道歉。