可能重复:
Why doesn’t Java allow generic subclasses of Throwable?
我正在尝试在泛型类中进行常规的RuntimeException:
public class SomeGenericClass<SomeType> {
public class SomeInternalException extends RuntimeException {
[...]
}
[...]
}
这段代码在RuntimeException
The generic class SomeGenericClass<SomeType>.SomeInternalException may not subclass java.lang.Throwable
这个词上给出了错误。
这个RuntimeException与我的类是通用的有什么关系?
答案 0 :(得分:11)
Java doesn't allow generic subclasses of Throwable。并且,非静态内部类通过其外部类的类型参数有效地参数化(参见Oracle JDK Bug 5086027)。例如,在您的示例中,您的内部类的实例具有SomeGenericClass<T>.SomeInternalException
形式的类型。因此,Java不允许泛型类的静态内部类扩展Throwable
。
解决方法是使SomeInternalException
成为静态内部类。这是因为如果内部类是static
,那么它的类型将不是通用的,即SomeGenericClass.SomeInternalException
。
public class SomeGenericClass<SomeType> {
public static class SomeInternalException extends RuntimeException {
[...]
}
[...]
}