相关疑难解决方法(0)

为什么Java不允许Throwable的泛型子类?

根据Java语言规范,第3版:

如果泛型类是其直接或间接子类,则为编译时错误Throwable.

我希望理解为什么做出这个决定.通用异常有什么问题?

(据我所知,泛型只是编译时的语法糖,他们将被翻译成Object反正在.class文件,因此有效地声明一个泛型类是仿佛一切都在它是一个Object,请纠正我,如果我错了.)

java generics language-design exception

142
推荐指数
4
解决办法
3万
查看次数

Java中的内部静态与非静态异常类

我确实注意到有关静态和非静态内部异常类的奇怪行为。

例如下面的代码不会编译:

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 或者还有其他一些原因要吗?

java generics exception

5
推荐指数
1
解决办法
77
查看次数

标签 统计

exception ×2

generics ×2

java ×2

language-design ×1