首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Groovy Enums不能访问类变量?

为什么Groovy Enums不能访问类变量?
EN

Stack Overflow用户
提问于 2015-10-13 08:45:13
回答 1查看 577关注 0票数 4

找不到任何说明无法从枚举内访问类变量的原因的文档。考虑这个例子:

代码语言:javascript
复制
package groovy;

public class Universe {

    static String test = "test";

    enum Planet {

        EARTH {
            @Override
            void doSomething(){
                System.out.print(test);
            }
        };

        abstract void doSomething();
    }

    public static void main(String[] args) {
        Universe.Planet.EARTH.doSomething(); // No such property: test for class: groovy.Universe$Planet$1
    }
}

我知道这段代码也是完美的Java代码。尽管它使用JRE可以像预期的那样工作,但不能与Groovy的运行时环境一起工作,这让我更加好奇。有什么证据可以证明这种差异吗?谢谢

EN

回答 1

Stack Overflow用户

发布于 2015-10-13 09:26:23

Groovy需要一些帮助来查找宇宙的变量。如果您想了解official documentation和Groovy语言之间的一些不同之处,这里有一个指向它们的链接。这里有一个涉及到这一点的email discussion。对于任何不熟悉枚举的人来说,它们都是静态对象,所以不能访问实例对象或变量。这就引出了我们的答案,静态变量需要以静态的方式引用(通过类,而不是实例)。

此外,如果你试图在Groovy1.7之前使用内部类,你将会遇到麻烦(你不能)。

代码语言:javascript
复制
public class Universe {

static String test = "testing";

enum Planet {

    EARTH {
        @Override
        void doSomething(){
            System.out.print(Universe.test);
        }
    };

    abstract void doSomething();
}

public static void main(String[] args) {
    Universe.Planet.EARTH.doSomething(); // No such property: test for class: groovy.Universe$Planet$1
}
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33092416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档