' Main.this'如果外部类被泛化,则无法从静态上下文引用

时间:2016-03-14 14:37:52

标签: java generics

为什么以下代码没问题,但是一旦将T作为通用添加到Main,它会抛出以下错误?

  

' Main.this'无法从静态上下文引用

//public class Main<T> { - uncomment this for the error to appear

public class Main {
    public static void main(String[] args) {
        new Main();
    }

    class TestNonStatic {}

    private static class TestStatic {
        public TestStatic(TestNonStatic nonStatic) { //this is the line that fails

        }
    }
}

我经历了generics restrictions,但我不明白为什么会导致错误。 我也经历了很多类似的问题,但我不明白为什么添加通用会改变这种情况。

1 个答案:

答案 0 :(得分:4)

您的TestNonStatic具有隐式通用,您必须指定它是否为原始类型

    public TestStatic(Main.TestNonStatic nonStatic) { 

或通用类型

    public TestStatic(Main<String>.TestNonStatic nonStatic) { 

或使用非静态类

private class TestStatic {
    public TestStatic(/*Main<T>.*/TestNonStatic nonStatic) { 

它不会隐式假设以下内容,因为类是static

    public TestStatic(Main<T>.TestNonStatic nonStatic) { 

为什么没有一些默认行为,可能是因为这可能会导致更加模糊的错误消息;)