java - 如果我需要可序列化,我应该使用具体列表(例如 ArrayList)还是(可序列化)列表?

标签 java

我们在办公室讨论,无法理解哪种方法更好

我有一个类 (SomeClass),它有一些方法可以接收 Serializable 对象。签名如下:

public void someMethod(Serializable serializableObject){
    ...
}

我需要从另一个类调用这个方法,但我应该为它提供一些列表作为事实参数。有两种不同的方法

1。可序列化

private SomeClass someClass;

public void doSomething() {
    List<String> al = new ArrayList<String>();

    al.add("text");

    someClass.someMethod((Serializable)al);
}

2。数组列表

private SomeClass someClass;

public void doSomething() {
    ArrayList<String> al = new ArrayList<String>();

    al.add("text");

    someClass.someMethod(al);
}
  1. 第一个示例的好处是它遵循了 java 的最佳实践,即:对引用类型使用接口(interface)而不是具体实现,任何程序员在阅读该源代码时都会明白我们不需要特殊的行为数组列表。我们唯一需要它的地方是可序列化行为,我们通过将其转换为 Serializable 接口(interface)来添加此行为。程序员可以简单地将 List 的当前实现更改为其他一些可序列化的实现,例如 LinkedList,而不会对此元素产生任何副作用,因为我们使用接口(interface) List 作为它的引用类型。

  2. 第二个示例的好处是我们将 ArrayList 称为不仅具有 List 行为而且具有 Serializable 行为的类。因此,如果有人查看此代码并试图将 ArrayList 更改为 List,他将收到编译时错误,这将减少程序员了解那里发生的事情的时间

更新:我们无法更改 someMethod 签名。它来自第三方公司,我们不仅将其用于可序列化列表,还用于字符串、整数和其他一些可序列化对象

最佳答案

当您只需要接口(interface)提供的方法时,您应该使用接口(interface)。 (这是大多数情况)但是,如果您需要多个接口(interface),则可以使用泛型,但最简单的方法是使用具体类型。

关于java - 如果我需要可序列化,我应该使用具体列表(例如 ArrayList)还是(可序列化)列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6873192/

相关文章:

java - Android App Bundle 在 Android 应用中引入 Resource Not found crash

java - 使用java插入列表<text> cassandra

java - wait() 是否需要局部变量同步

java - JPA注释DiscriminatorColumn - 如何设置索引

java - 如何在 Java 中启动一个新的 OpenStack 实例?

java - 我应该使用 hibernate 二级缓存吗?

java - 另一个关于servlet的问题

java - Apache Ant : Execute subsequent targets without waiting for completion

c# - 让类实现不同接口(interface)以限制客户端操作时的设计问题

java - 覆盖继承的变量名