根据Java语言规范,第3版:
我希望理解为什么做出这个决定.通用异常有什么问题?
(据我所知,泛型只是编译时的语法糖,他们将被翻译成Object反正在.class文件,因此有效地声明一个泛型类是仿佛一切都在它是一个Object,请纠正我,如果我错了.)
我确实注意到有关静态和非静态内部异常类的奇怪行为。
例如下面的代码不会编译:
public class MyClass<T> {
private class MyInnerException extends Exception { // won't compile
..
}
}
Run Code Online (Sandbox Code Playgroud)
但下面的代码将编译:
public class MyClass<T> {
private static class MyInnerException extends Exception { // will compile
..
}
}
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
有一点是肯定的,由于类型擦除,我们不能有泛型异常,但是上面的不是泛型异常类,而是在泛型类中。但是如果它是静态的它是允许的,但如果它是非静态的它是不允许的?
后续问题,是否因为 Generic 的类型擦除功能而不允许通用异常,就像这里提到的:https : //www.mscharhag.com/java/java-exceptions-and-generic-types 或者还有其他一些原因要吗?