class FixedSizeStack<T> {
// ...
private Object[] storage;
// ...
@SuppressWarnings("unchecked")
public T pop() { return (T) storage[--index]; }
}
public class Program {
// ...
public static void main(String[] args) {
FixedSizeStack<String> strings = new FixedSizeStack<String>;
// ... заполняем массив
for (int i = 0; i < SIZE; i++) {
String s = strings.pop();
System.out.print(s + " ");
}
}
}
В учебнике (
Thinking in Java) говорится, что в методе
pop() преобразования не происходит, так как
T стирается до
Object, и по сути происходит преобразование
Object в
Object. Однако почему информация сохраняется и этот код работает - выводит все
String объекты? Я окончательно запутался, до этого момента было несколько моментов про создание объектов и массивов параметризованных типов, и там говорилось, что такое преобразование гуд:
При вызове get() объект преобразуется к T; это правильный тип, поэтому преобразование безопасно.
public T get(int index) { return (T)array[index]; }
Подскажите пожалуйста, что все-таки происходит на самом деле.