Java例外。将一种类型转换为另一种

时间:2013-02-27 11:36:28

标签: java exception exception-handling

有人可以解释为什么第一个演员没有给CCE吗?

public class Test {

  public static void main(String[] args) throws Throwable {
    Test.<RuntimeException>throwIt(new Exception());
  }

  @SuppressWarnings("unchecked")
  private static <T extends Throwable> void throwIt(Throwable throwable) throws T {
    throw (T) throwable; // no ClassCastException
    throw (RuntimeException) throwable; // ClassCastException(as it should be)
  }
}

P.S。评论一个演员(否则不会编译)。

1 个答案:

答案 0 :(得分:1)

这是Java泛型实现的特性,它是通过类型擦除实现的,这就是为什么(T)强制转换实际上将它转换为最左边的Throwable。因为,新的Exception()会产生一个Throwable对象,你可以安全地抛出它。

您可以在JSL中查看它 http://docs.oracle.com/javase/specs/jls/se5.0/html/typesValues.html#108979