Вам необходимо изменить тип блоков на Stack<Integer>[]
.
edit: Код хорошо компилируется.Вы получаете предупреждение, которое напоминает вам о том, что неправильное присвоение массива все еще может произойти во время выполнения, поэтому компилятор не может гарантировать, что вы не получите ClassCastException во время выполнения, если вы напишите некорректный код.Однако опубликованное решение делает именно то, чего хочет ОП:
public static void main(String[] args) throws Exception {
Stack<Integer>[] array = new Stack[] { new Stack(7) };
Integer result = array[0].pop();
}
class Stack<T> {
private final T foo;
public Stack(T foo) {
this.foo = foo;
}
T pop() {
return foo;
}
}
пс.Чтобы уточнить, это предупреждение указывает на то, что даже если вы не выполняете явное приведение, вы все равно можете получить ClassCastException во время выполнения, как показано в следующем коде:
public static void main(String[] args) throws Exception {
Stack<Integer>[] array = new Stack[] { new Stack(7) };
Stack notAnIntegerStack = new Stack<Object>(new Object());
array[0] = notAnIntegerStack;
Integer result = array[0].pop(); // class cast exception at runtime
}
По всему этому есть предупреждениякод указывает на опасность, но он скомпилируется.Надеюсь, это прояснит ситуацию.