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>;
// ... filling an array
for (int i = 0; i < SIZE; i++) {
String s = strings.pop();
System.out.print(s + " ");
}
}
}
Eckel ( Thinking in Java )在他的书中说pop()
方法实际上没有进行任何投射,T
被删除Object
和pop()
实际上只是将Object
投射到Object
。好的,但如果String
被删除到Object
并且方法返回Object
,那么如何保存有关String对象的信息?在这种情况下,编译器必须说一些不兼容的类型。为什么这段代码有效?