0

最初のキャストが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)
  }
}

PSコメント1キャスト(そうでない場合はコンパイルされません)。

4

1 に答える 1

1

これはJavaジェネリックの実現の機能であり、型消去によって実現されました。そのため、(T)キャストは実際に左端の境界としてThrowableにキャストします。新しいException()は、安全にスローできるThrowableオブジェクトを生成するためです。

JSLhttp ://docs.oracle.com/javase/specs/jls/se5.0/html/typesValues.html#108979で確認でき ます。

于 2013-02-27T12:25:50.853 に答える