在泛型类中转换后如何保存类型信息?

时间:2016-08-16 08:58:02

标签: java generics casting type-erasure

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被删除Objectpop()实际上只是将Object投射到Object。好的,但如果String被删除到Object并且方法返回Object,那么如何保存有关String对象的信息?在这种情况下,编译器必须说一些不兼容的类型。为什么这段代码有效?

0 个答案:

没有答案