Правильное использование Arraylist и Java Generics против Векторов - PullRequest
0 голосов
/ 24 декабря 2009

Я использовал векторы в прошлом и очень хорошо с ними знаком. Я слышал, что ArrayLists быстрее и гибче. Я новичок в использовании ArrayLists и Java Generics . В настоящее время я использую их следующим образом и получаю предупреждение о параметризации (что я и сделал, объявив их <String>.

ArrayList<String> arrayList = new ArrayList <String> ();
...
//then within a method
arrayList.add(file.getName()); //<-This line triggers the warning.

Я обнаружил в Интернете, что этого можно избежать, подавив предупреждения в методе, как вы можете видеть ниже. Тем не менее, это обходной путь, и я бы лучше изучил, как работают arraylists и использовал их правильно, а не подавлял предупреждения о неправильном их использовании.

@SuppressWarnings("unchecked")

И, пожалуйста, если есть какие-то соглашения или стандарты относительно использования ArrayLists, я бы тоже хотел узнать о них.

РЕДАКТИРОВАТЬ: Я получаю следующее предупреждение: Безопасность типов: метод add (Object) принадлежит необработанному типу ArrayList. Ссылки на универсальный тип ArrayList должны быть параметризованы

Ответы [ 4 ]

5 голосов
/ 24 декабря 2009

Во-первых, обратитесь к вашему списку (как переменная, тип возвращаемого значения или тип параметра) по имени интерфейса, так:

List<String> list = new ArrayList<String>();

Плохо связывать ваш код с конкретной реализацией.

В векторах нет ничего плохого. В основном это ArrayLists, где все методы синхронизированы. Это может создать ненужные накладные расходы, но не слишком.

Что касается подавления непроверенных предупреждений, это должно быть необходимо, только если вы ссылаетесь на список без общего аргумента. Например:

List list = new ArrayList<String>();
list.add("boo");

Поэтому всегда включайте соответствующий универсальный тип всякий раз, когда вы используете List в качестве возвращаемого типа, типа переменной или типа параметра.

Некоторые библиотеки могут не предоставлять вам такую ​​возможность, но это должны быть единственные обстоятельства, при которых вам нужно подавлять непроверенные предупреждения.

3 голосов
/ 24 декабря 2009

Возможно, вы передаете arrayList методу, в котором сигнатура метода равна void method(ArrayList arrayList) или лучше void method(List arrayList), а компилятор выдает предупреждение о непроверенной проверке. Вы должны изменить сигнатуру метода на void method(ArrayList<String> arrayList) или лучше void method(List<String> list)

1 голос
/ 24 декабря 2009

Что такое предупреждение? Мне кажется, что это нормально, хотя вам действительно нужно написать код для его интерфейса, List.

0 голосов
/ 24 декабря 2009

Вы упоминаете, что предупреждение исходит из строки ниже: </p> <pre><code>arrayList.add(file.getName());

Если file.getName () возвращает любое значение, кроме «String», то вы получите ошибку компиляции, а если «file.getName ()» вернет «String», то предупреждения не будет.

...