2017-01-09 10 views
-1

У меня есть спецификация, которая требует от меня передать массив списков. Массив всегда длина 2. Я использую следующие для достижения этой цели:Java: массив списка <MyClass>

List<MyClass> [] data = new ArrayList[2]; 
data[0] = new ArrayList<MyClass>(); 
data[1] = new ArrayList<MyClass>(); 

компилирует, но дает предупреждение:

uses unchecked or unsafe operations. 

Я понимаю, что Массивы генерики не допускаются в Java, однако я не могу изменить спецификация и выше код, похоже, работают хорошо. До тех пор, пока я сознаю, что я никогда не переназначаю элементы массива как нечто отличное от типа ArrayList<MyClass>, есть ли какие-то причины, по которым я не должен просто подавлять это предупреждение и быть на моем пути?

+1

Лучше всего использовать Список Список: 'Список <Список >' –

+2

[Вы не можете создавать общие массивы.] (Https://docs.oracle.com/javase/tutorial/java/generics/restrictions. html # createArrays) – shmosel

+1

Возможный дубликат [this] (http://stackoverflow.com/questions/2927391/whats-the-reason-i-cant-create-generic-array-types-in-java) –

ответ

3

Компилятор в вашем случае, предупреждая вас, что ваш код не собирается проверять вас, какой тип значений вы добавляете в свой массив. Вы можете игнорировать это предупреждение, если вы гарантируете, что в ваш массив добавятся только ArrayList <MyClass>.

@SuppressWarnings («unchecked») присутствует по какой-либо причине в java, вы можете подавить предупреждение и сообщить своему компилятору, что вам не нужна его проверка типа.

0

Это нормально, чтобы подавить предупреждение, учитывая, что Java не разрешает создание общего массива. Хотя это не безопасно, нет другого способа создания массивов с помощью дженериков, если вы не проигнорируете или не подавите это предупреждение.

+2

Java не позволяет это по какой-то причине. Почему вы предполагаете, что это можно игнорировать? – shmosel

+0

Я явно устанавливаю элементы 0 и 1 объектам типа 'ArrayList '. Java также позволяет компилировать ее по какой-либо причине. – thedarklord47

+0

@ thedarklord47 Главным образом из-за обратной совместимости с предиповыми массивами. В любом случае, я не сказал, что это неприемлемо, просто это не обязательно безопасно. – shmosel

0

Вы не можете создавать общие массивы; см. official Java documentation on the subject.

Вы все еще можете избавиться от предупреждения времени компиляции, как так ...

List[] data = new List[2]; 

Конечно, это означает, что вам нужно проверить тип все, что происходит, чтобы/Выходя из Перечисляет, когда вы начинаете ссылаться на свои данные & соответствующим образом. Так что будьте осторожны.