问题描述
|
我正在编写一个接口及其实现。该接口具有类似
doSomething(String[] strs,Integer[] ints,String msg);
我将参数声明为数组只是因为它会调用具有类似参数的外部接口。有人建议doSomething聚合应该是util List而不是数组。但是我找不到任何最佳实践来解释util List为何更可取的原因?
位置
解决方法
列表具有更丰富的API和各种实现,因此更易于使用。因此,结果是它通常更具灵活性和可维护性。
乔什·布洛赫(Josh Bloch)的《有效Java》(Effective Java)强调了选择列表的另一个原因:“不变性”。
泛型是在编译时检查的,因此类型列表实际上比数组捕获更多的错误:
// Fails at runtime!
Object[] objectArray = new Long[1];
objectArray[0] = \"I don\'t fit in\"; // Throws ArrayStoreException
// Won\'t compile!
List<Object> ol = new ArrayList<Long>(); // Incompatible types
ol.add(\"I don\'t fit in\");
因此,在某些情况下,使用列表而不是数组实际上更安全。
不仅限于此,但它开始变得难以解释。请参阅指向有效Java ch 5的相关部分的链接:http://java.sun.com/docs/books/effective/generics.pdf
高温超导
,基本上,列表是抽象类型,它需要由其任何家族成员(如ArrayList等)再次实现。因此,在性能方面,使用数组和列表没有太大区别,两者是相同的。仅在可维护性方面,我们使用List接口,然后根据需要可以在以后的任何List接口系列中实现它。list还可以在数组上提供灵活的操作。
,这属于可维护性。您会发现使用为您准备的方法非常方便。