Java 7 API 设计最佳实践 - 返回数组或返回集合

2022-09-03 18:16:56

我知道这个问题在通用产品问世之前就已经问过了。数组确实胜出一个位,因为数组强制执行返回类型,它更类型安全。

但是现在,使用最新的JDK 7,每次我设计这种类型的API时:

public String[] getElements(String type)
vs
public List<String> getElements(String type)

我总是在努力想出一些很好的理由来返回数组或其他方式的集合。在选择 String[] 或 List 作为 API 的返回类型的情况下,最佳做法是什么?或者它是马的课程。

我心中没有特例,我更倾向于寻找一个通用的利弊比较。


答案 1

如果您正在编写公共API,那么您的客户端通常会更喜欢集合,因为它们更容易操作并与代码库的其余部分集成。另一方面,如果您希望在对性能高度敏感的上下文中使用公共 API,则首选原始数组。

如果您编写此文件供自己使用,则最佳做法是从集合类型开始,并且仅在存在明确的性能问题时才切换到数组。

数组的元素类型可以在运行时通过反射来确定,因此,如果该特定功能对您很重要,那么选择数组是另一种情况。


答案 2

这是部分列表

阵列的优点:

  • 天生可变
  • 您确切地知道“您得到的”(类型是什么) - 因此您确切地知道返回的对象将如何表现。

列表的优点:

  • 行为因返回的实际类型而异(例如 - 可以是可变的,也可以是不可变的,具体取决于实际类型)
  • 更好的招聘设计
  • (取决于实际类型)可能是动态大小
  • 更直观 ,- 如果作为键馈送到基于哈希的集合,这可能是至关重要的。hashCode()equals()
  • 类型安全:

    String[] arr1 = new String[5]; 
    Object[] arr2 = arr1;
    arr2[0] = new Object(); //run time error :(
    List<String> list1 = new LinkedList<String>();
    List<Object> list2 = list1; //compilation error :)