【发布时间】:2011-07-29 12:37:32
【问题描述】:
我们在办公室讨论,不知道哪种方法更好
我有一个类(SomeClass),它带有一些接收可序列化对象的方法。签名如下:
public void someMethod(Serializable serializableObject){
...
}
我需要从另一个类调用这个方法,但我应该为它提供一些 List 作为事实参数。有两种不同的方法
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);
}
第一个示例的好处是它遵循 java 的最佳实践,即:使用接口而不是具体实现引用类型,任何程序员在阅读该源代码时都会明白我们不需要特殊行为数组列表。我们唯一需要它的地方是可序列化行为,我们通过将其转换为可序列化接口来添加此行为。程序员可以简单地将当前的 List 实现更改为其他可序列化的实现,例如 LinkedList,而不会对这个元素产生任何副作用,因为我们使用接口 List 作为它的引用类型。
第二个例子的好处是我们将 ArrayList 称为类,它不仅具有 List 行为,而且还具有 Serializable 行为。因此,如果有人查看此代码并尝试将 ArrayList 更改为 List,他会收到一个编译时错误,这将减少程序员了解那里发生的事情的时间
更新:我们无法更改 someMethod 签名。它来自第三方公司,我们不仅将其用于可序列化列表,还用于字符串、整数和其他一些可序列化对象
【问题讨论】:
标签: java