Можно ли создать массив общего интерфейса в java?Массив общего интерфейса
interface Sample<T>{}
в другом классе
Sample<T> s[] = new Sample[2] ; // for this it shows warning
Sample<T> s[] = new Sample<T>[2];// for this it shows error
Можно ли создать массив общего интерфейса в java?Массив общего интерфейса
interface Sample<T>{}
в другом классе
Sample<T> s[] = new Sample[2] ; // for this it shows warning
Sample<T> s[] = new Sample<T>[2];// for this it shows error
К сожалению, Java не поддерживает создание общих массивов. Я не знаю точной причины. На самом деле генераторы существуют только во время компиляции и удаляются при запуске javac, т. Е. Переходят из .java в .class. Но этого недостаточно, чтобы понять это ограничение. Вероятно, у них были проблемы с обратной совместимостью с такой функцией.
Ниже приведены обходные пути, которые вы можете использовать.
Использовать коллекции (например, список) вместо массива.
List<Sameple> list = new ArrayList<Sameple>(); // this is OK and typesafe
Создание массива без дженериков, поместите код в специальный фабричный метод с аннотацией @SuppressWarnings
:
public class Test {
interface Sample<T>{}
@SuppressWarnings("unchecked")
public static <T> Sample<T>[] sampleArray() {
return new Sample[2];
}
}
Теперь вы можете использовать этот метод фабрики без дополнительного предупреждения.
Генеральный совет.
Это плохая практика, чтобы подавлять предупреждения. Предупреждения - это потенциальные проблемы. Поэтому, если мне нужно подавить предупреждение, я хотя бы попытаюсь уменьшить область, в которой предупреждение подавлено. К сожалению, устаревшие API Java не поддерживают дженерики. Мы часто получаем предупреждения, когда используем такие API. Я всегда пытаюсь локализовать такие виды использования в специальных классах или, по крайней мере, таких методах, как sampelArray()
. Эти методы отмечены @SuppressWarning
и часто содержат комментарии, которые объясняют, почему здесь подавляются предупреждения.
Возможный дубликат [Java generics и инициализация массива] (http://stackoverflow.com/questions/470198/java-generics-and-array-initialization) – Thilo
Возможный дубликат [Java как: Generic Array creation] (http://stackoverflow.com/questions/529085/java-how-to-generic-array-creation) – Bozho