10

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

4

1 回答 1

13

Java 不允许 Throwable 的泛型子类。而且,非静态内部类通过其外部类的类型参数有效地参数化(参见Oracle JDK 错误 5086027)。例如,在您的示例中,您的内部类的实例具有 form 类型SomeGenericClass<T>.SomeInternalException。因此,Java 不允许泛型类的静态内部类扩展Throwable.

一种解决方法是制作SomeInternalException一个静态内部类。这是因为如果内部类是static它的类型将不是通用的,即SomeGenericClass.SomeInternalException.

public class SomeGenericClass<SomeType> {

    public static class SomeInternalException extends RuntimeException {
        [...]
    }

    [...]
}
于 2012-12-04T01:22:43.430 回答