java - 使泛型类的内部类扩展 Throwable

标签 java generics inheritance

<分区>

Possible Duplicate:
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 与我的类是泛型有什么关系?

最佳答案

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

    [...]
}

关于java - 使泛型类的内部类扩展 Throwable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13694637/

相关文章:

java - Checkstyle LineLength 配置不起作用

java - 这是反转链表的糟糕解决方案吗?

java - Type Erasure 抬头,如何规避?

C++多重继承,删除对象出错

c++ - 为什么编译器会尝试将指针传递给引用而不是此代码片段中的指针?

java - 如何编译JavaBean?

java - m2eclipse 如何制作一个网络应用程序

java - 为什么我们不能使用扩展边界添加java泛型中的元素?

java - Callable 和 Future 接口(interface)中泛型的使用?

c++ - 继承多态函数调用