Spec-Zone .ru
спецификации, руководства, описания, API
След: Наборы
Урок: Функциональная совместимость
Совместимость
Домашняя страница > Наборы > Функциональная совместимость

Совместимость

Платформа Наборов Java была разработана, чтобы гарантировать полную функциональную совместимость между базовыми интерфейсами набора и типами, которые использовались, чтобы представить наборы в ранних версиях платформы Java: Vector, Hashtable, массив, и Enumeration. В этом разделе Вы изучите, как преобразовать старые наборы к наборам Платформы Наборов Java и наоборот.

Совместимость снизу вверх

Предположите, что Вы используете API, который возвращает наборы наследства в тандеме с другим API, который требует объектов, реализовывая интерфейсы набора. Чтобы заставить эти два API взаимодействовать гладко, необходимо преобразовать наборы наследства в современные наборы. К счастью Платформа Наборов Java делает это легким.

Предположите, что старый API возвращает массив объектов, и новый API требует a Collection. У Платформы Наборов есть реализация удобства, которая позволяет массиву объектов просматриваться как a List. Вы используете Arrays.asList передать массив к любому методу, требующему a Collection или a List.

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

Если старый API возвращает a Vector или a Hashtable, у Вас нет никакой работы, чтобы сделать вообще потому что Vector был retrofitted, чтобы реализовать List интерфейс, и Hashtable был retrofitted, чтобы реализовать Map. Поэтому, a Vector может быть передан непосредственно к любому методу, призывающему a Collection или a List.

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

Точно так же a Hashtable может быть передан непосредственно к любому методу, призывающему a Map.

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

Менее часто API может возвратиться Enumeration это представляет набор объектов. Collections.list метод преобразовывает Enumeration в a Collection.

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

Обратная совместимость

Предположите, что Вы используете API, который возвращает современные наборы в тандеме с другим API, который требует, чтобы Вы передали в наборах наследства. Чтобы заставить эти два API взаимодействовать гладко, необходимо преобразовать современные наборы в старые наборы. Снова, Платформа Наборов Java делает это легким.

Предположите, что новый API возвращает a Collection, и старый API требует массива Object. Поскольку Вы, вероятно, знаете, Collection интерфейс содержит a toArray метод, разработанный явно для этой ситуации.

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

Что, если старый API требует массива String (или другой тип) вместо массива Object? Вы только используете другую форму toArray — тот, который берет массив на вводе.

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

Если старый API требует a Vector, стандартный конструктор набора пригождается.

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

Случай, где старый API требует a Hashtable обрабатывается аналогично.

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

Наконец, что делает Вы делаете, если старый API требует Enumeration? Этот случай не распространен, но это действительно время от времени происходит, и Collections.enumeration метод был обеспечен, чтобы обработать это. Это - статический метод фабрики, который берет a Collection и возвраты Enumeration по элементам Collection.

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

Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Функциональная совместимость
Следующая страница: Проект API