Как я могу изменить все мои устаревшие Векторы на ArrayLists, и есть ли какие-либо предостережения? - PullRequest
4 голосов
/ 18 октября 2011

У меня есть проект Java среднего размера в Eclipse, который использует Vector<E> вместо предпочтительного ArrayList<E>.Я хотел бы заменить их.

  • Есть ли способ, используя Eclipse, изменить все это?Любой метод рефакторинга?

  • Или было бы достаточно сделать общий поиск и замену для каждого Vector<String> вхождения?Есть ли какие-либо предостережения по этому поводу?В каких ситуациях этот подход потерпит неудачу?

На самом деле, я только что сделал последнее, и это сработало для моего приложения, но это должен быть более общий вопрос.1023 *

Ответы [ 2 ]

5 голосов
/ 18 октября 2011

Vector был модифицирован для реализации List в Java 1.2, когда был представлен API коллекций, который включает в себя ArrayList. Так что у него есть как методы старого стиля, такие как elementAt(), так и методы нового стиля, такие как get(), которые во многом похожи на рабочие.

Старые методы отсутствуют в List или ArrayList, поэтому, если вы выполняете поиск и замену и используете старые методы, он не сможет скомпилироваться. Впрочем, достаточно легко найти и исправить их. То же самое для iterator() / Iterator, заменяющего Enumeration и подобных.

Vector операции были синхронизированы; если программа полагается на это для корректности, она может потерпеть неудачу, если ее заменить на ArrayList, а это не так. Оберните Collections.synchronizedList(), если вам нужно старое поведение. Это источник более тонких ошибок.

3 голосов
/ 18 октября 2011

Единственные вещи, которые могут привести к ошибкам, это

  • , если вы используете методы, которые есть в Vector, но не в ArrayList (но я даже не уверен, что такой метод существует)
  • если вы полагаетесь на синхронизированность Vector в некоторых ваших классах, чтобы сделать их поточно-ориентированными.
  • если вы где-то используете отражение и этот основанный на отражении код использует имя класса Vector.
  • если вы используете какой-то устаревший API, все еще использующий Vector, а не List of ArrayList (как некоторые классы Swing)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...