使泛型类的内部类扩展为Throwable

时间:2012-12-04 01:18:26

标签: java generics inheritance

  

可能重复:
  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与我的类是通用的有什么关系?

1 个答案:

答案 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 {
        [...]
    }

    [...]
}