Я пытаюсь сделать что-то вроде этого: -
public static ArrayList<myObject>[] a = new ArrayList<myObject>[2];
myObject - это класс. Я получаю эту ошибку: - Создание общего массива (стрелка указывает на новый.)
Я пытаюсь сделать что-то вроде этого: -
public static ArrayList<myObject>[] a = new ArrayList<myObject>[2];
myObject - это класс. Я получаю эту ошибку: - Создание общего массива (стрелка указывает на новый.)
У вас не может быть массивов общих классов. Java просто не поддерживает его.
Вам следует рассмотреть возможность использования коллекции вместо массива. Например,
public static ArrayList<List<MyObject>> a = new ArrayList<List<MyObject>();
Другим "обходным путем" является создание вспомогательного класса, такого как
class MyObjectArrayList extends ArrayList<MyObject> { }
а затем создайте массив MyObjectArrayList
.
Вот хорошая статья о том, почему это не разрешено на этом языке. В статье приведен пример того, что может произойти, если это разрешено:
List<String>[] lsa = new List<String>[10]; // illegal
Object[] oa = lsa; // OK because List<String> is a subtype of Object
List<Integer> li = new ArrayList<Integer>();
li.add(new Integer(3));
oa[0] = li;
String s = lsa[0].get(0);
Существует более простой способ создания общих массивов, чем использование List.
Во-первых, пусть
public static ArrayList<myObject>[] a = new ArrayList[2];
Затем инициализируйте
for(int i = 0; i < a.length; i++) {
a[i] = new ArrayList<myObject>();
}
Вы можете сделать
public static ArrayList<myObject>[] a = (ArrayList<myObject>[])new ArrayList<?>[2];
или
public static ArrayList<myObject>[] a = (ArrayList<myObject>[])new ArrayList[2];
(Первое, вероятно, лучше.) Оба будут вызывать непроверенные предупреждения, которые вы можете в значительной степени игнорировать или подавлять, используя: @SuppressWarnings ( "unchecked" )
если вы пытаетесь объявить arraylist своего общего класса, вы можете попробовать:
public static ArrayList<MyObject> a = new ArrayList<MyObject>();
это даст вам arraylist myobject (размер 10), или если вам нужен только аррайалист размером 2, который вы можете сделать:
public static ArrayList<MyObject> a = new ArrayList<MyObject>(2);
или вы можете попытаться создать arraylist arraylists:
public static ArrayList<ArrayList<MyObject>> a = new ArrayList<ArrayList<MyObject>>();
хотя я не уверен, что последнее, что я сказал, правильно...
Мне кажется, что вы используете неправильный тип скобок. Причина, по которой вы не можете определить массив общих, - это тип erasure.
Плюс, объявление переменной "a" является хрупкой, она должна выглядеть так:
List<myObject>[] a;
Не используйте конкретный класс, если вы можете использовать интерфейс.