为什么EclipseAPI使用数组而不是集合?

为什么EclipseAPI使用数组而不是集合?,eclipse,api,eclipse-plugin,eclipse-rcp,Eclipse,Api,Eclipse Plugin,Eclipse Rcp,在EclipseAPI中,返回和参数类型主要是数组而不是集合。一个例子是IContainer上的members方法,它返回IResources[] 我对为什么会这样感兴趣。可能是以下情况之一: 这些API是在泛型可用之前设计的,因此IResource[]比仅Collection或List 内存问题,例如,ArrayList内部包含的数组空间大于所需空间(以提供add的有效实现),而数组总是根据所需的目标大小构建的 无法在数组中添加/删除元素,因此可以安全地进行迭代(但仍然需要防御性复制,因为仍然

在EclipseAPI中,返回和参数类型主要是数组而不是集合。一个例子是
IContainer
上的
members
方法,它返回
IResources[]

我对为什么会这样感兴趣。可能是以下情况之一:

  • 这些API是在泛型可用之前设计的,因此
    IResource[]
    比仅
    Collection
    List
  • 内存问题,例如,
    ArrayList
    内部包含的数组空间大于所需空间(以提供
    add
    的有效实现),而数组总是根据所需的目标大小构建的
  • 无法在数组中添加/删除元素,因此可以安全地进行迭代(但仍然需要防御性复制,因为仍然可以更改元素,例如将它们设置为
    null

  • 是否有人对API为何以这种方式开发有任何见解或其他想法?

    将此作为答案发布,以便可以接受


    Eclipse早于泛型,它们非常重视API的稳定性。此外,在低级别的SWT中,传递数组似乎用于反映正在包装的操作系统API。一旦有了一系列使用阵列的工具,我想保持一致是有意义的。还要注意的是,在使用反射时,数组不会遇到所有类型擦除问题


    是的,我听说集合api通常更容易用于动态项目列表。

    只是猜测,但它可能是在Java引入泛型之前创建的,所以当时唯一的类型化集合是数组。Eclipse早于泛型,他们非常重视api的稳定性。此外,在低级别的SWT中,传递数组似乎用于反映正在包装的操作系统API。一旦有了一系列使用阵列的工具,我想保持一致是有意义的。还要注意的是,在使用反射时,数组不会出现所有类型擦除问题。@Robert您应该将您的注释作为答案发布。它就在上面。@Robert请将您的评论作为答案发布,这样我就可以接受了。顺便说一句,我对继续在新API中使用数组的主要不满是它到处都需要使用
    System.arrayCopy
    collection.toArray(新的IResource[collection.size()])