Java 为什么允许“枚举的枚举的枚举…”?

Java 为什么允许“枚举的枚举的枚举…”?,java,syntax,enums,Java,Syntax,Enums,我不明白为什么会这样。 我尝试过不同的格式,它们似乎都很有效 为什么有一个枚举的枚举的枚举的..是合法的 interface I { enum E implements I { VAL; } class Test { I.E f1 = I.E.VAL; I.E.E f2 = I.E.VAL; I.E.E.E f3 = I.E.VAL; I.E.E.E.E

我不明白为什么会这样。 我尝试过不同的格式,它们似乎都很有效

为什么有一个
枚举的枚举的枚举的..
是合法的

interface I {

    enum E implements I {
        VAL;
    }

    class Test {
        I.E         f1 = I.E.VAL;
        I.E.E       f2 = I.E.VAL;
        I.E.E.E     f3 = I.E.VAL;
        I.E.E.E.E.E f4 = I.E.VAL;

        I.E v1 = I.E.VAL;
        I.E v2 = I.E.E.VAL;
        I.E v3 = I.E.E.E.E.E.E.VAL;
        I.E v4 = I.E.E.E.E.E.E.E.E.E.E.VAL;
    }
}

我的IDE报告它编译得很好,尽管
I.E
对我来说没有意义。

您的
I
接口包含一个名为
E
的枚举类型

此类型实现相同的
I
接口,因此它继承该接口包含的所有内容。
这包括
E
类型本身


换句话说,
I.E
正在访问
I.E
从外部
I

继承的
I.E
,这里没有无限递归。@MarkoTopolnik这是一个循环引用,而不是递归引起的无限循环。@TheodoreLogan所示的源代码创建了一个等价关系
E=E.E
,这意味着扩展规则
E->E.E
是一个标识类型转换;这个规则可以无限递归地应用。碰巧这张照片是在我写我上面闲聊评论的附加说明时出现在我的脑海里的。但是,如果您认为该评论有任何价值,并且认为“循环引用”名称对理解它至关重要,我欢迎您的解释。@MarkoTopolnik我个人认为您使用“无限递归”一词的上下文不会严重混淆任何人。不管怎么说,这似乎无关紧要,Specialit本可以先打出一句话来澄清他的推理,教育读者,而不是让这场毫无成果的对话发生。谢谢你的理性之声,@TheodoreLogan。我希望我们现在能够结束这场徒劳无益的交流。