文档

Java™ 教程
隐藏目录
兼容性
路径: 集合
课程: 互操作性

兼容性

Java集合框架的设计目标是确保核心集合接口和在早期Java平台版本中用于表示集合的类型之间的完全互操作性:VectorHashtable数组Enumeration。在本节中,您将学习如何将旧集合转换为Java集合框架集合,以及反之亦然。

向上兼容

假设您正在使用一个API,该API返回旧的集合,并与另一个要求实现集合接口的API一起使用。为了使这两个API之间能够顺利交互,您需要将旧的集合转换为现代集合。幸运的是,Java集合框架使这一过程变得简单。

假设旧的API返回一个对象数组,而新的API需要一个Collection。集合框架提供了一个方便的实现,允许将对象数组视为一个List。您可以使用Arrays.asList将数组传递给任何需要CollectionList的方法。

Foo[] result = oldMethod(arg);
newMethod(Arrays.asList(result));

如果旧的API返回一个VectorHashtable,那么您根本不需要进行任何工作,因为Vector已经被修改为实现List接口,而Hashtable已经被修改为实现Map接口。因此,可以直接将Vector传递给任何需要CollectionList的方法。

Vector result = oldMethod(arg);
newMethod(result);

同样地,Hashtable可以直接传递给任何需要Map的方法。

Hashtable result = oldMethod(arg);
newMethod(result);

较少见的情况是,一个API可能返回表示对象集合的EnumerationCollections.list方法将Enumeration转换为Collection

Enumeration e = oldMethod(arg);
newMethod(Collections.list(e));

向下兼容

假设您正在使用一个返回现代集合的API,并与另一个要求传递旧集合的API一起使用。为了使这两个API之间能够顺利交互,您需要将现代集合转换为旧集合。同样,Java集合框架使这一过程变得简单。

假设新的API返回一个Collection,而旧的API需要一个Object数组。如你所知,Collection接口包含一个专门用于此情况的toArray方法。

Collection c = newMethod();
oldMethod(c.toArray());

如果旧的API需要一个String数组(或其他类型的数组)而不是Object数组呢?你只需使用toArray的另一种形式,即接受数组作为输入的形式。

Collection c = newMethod();
oldMethod((String[]) c.toArray(new String[0]));

如果旧的API需要一个Vector,则标准的集合构造函数很方便。

Collection c = newMethod();
oldMethod(new Vector(c));

处理旧的API需要Hashtable的情况类似。

Map m = newMethod();
oldMethod(new Hashtable(m));

最后,如果旧的API需要一个Enumeration,该怎么办?这种情况并不常见,但偶尔会发生,因此提供了Collections.enumeration方法来处理它。这是一个静态工厂方法,它接受一个Collection并返回该Collection的元素上的Enumeration

Collection c = newMethod();
oldMethod(Collections.enumeration(c));

上一页:互操作性
下一页:API设计