Причина, по которой этот синтаксис разрешен в языке, заключается в том, что иногда вам все равно, какой подкласс объектов находится в массиве. Правила спецификации языка Java для подтипа массива включают:
Если S и T являются ссылочными типами, то S [] > 1 T [] если S > 1 T .
(где> 1 означает «прямой подтип»).
Это позволяет написать метод, подобный этому:
public void printArray(Object[] array) {
System.out.print('[');
boolean first = true;
for (Object obj : array) {
if (!first) {
System.out.print(", ");
} else {
first = false;
}
System.out.print(String.valueOf(obj));
}
System.out.print(']');
}
, а затем вызвать его с помощью:
String[] foo = { "a", "b", "c" };
printArray(foo);
Эта языковая функция имеет нежелательный эффект откладывания проблем ArrayStoreException на время выполнения.