【问题标题】:Parent's Enum in JavaJava 中的父级枚举
【发布时间】:2010-08-06 09:11:26
【问题描述】:

在下面的代码示例中,我正在尝试测试父类中枚举的值。我得到的错误是“p.theEnum 无法解析或不是字段。”,但它与我在父类中用于测试值的代码完全相同(显然没有 p)。

我哪里错了? :)

public class theParent {
    protected static enum theEnum { VAL1, VAL2, VAL3 };
    private theEnum enumValue = theEnum.VAL1;

    theParent() { this.theChild = new theChild(this); this.theChild.start(); }

    class theChild {
        private parentReference p;

        public theChild (theParent parent) { this.p = parent; }

        public void run() {
            // How do I access theEnum here?
            if (p.enumValue == p.theEnum.VAL1) { }
        }
    }
}

【问题讨论】:

    标签: java enums parent protected


    【解决方案1】:

    只需将其更改为:

    if (p.enumValue == theEnum.VAL1) { }
    

    没有必要限定它。

    (仅供参考,如果您将这样的示例与问题区域分开编译会有所帮助 - 我必须在上面的更改之外进行很多更改让它编译。)

    【讨论】:

    • 啊,干杯。我遇到的问题是 theEnum 实际上被称为 State,它试图使用 Thread.State,因此存在 p.theEnum 而不仅仅是 theEnum :) 另外,对于缺乏编译感到抱歉。我只对 Java 了解一半(我是一名 PHP 人,正在学习它),所以我只是在 textarea 中尽我所能:P 我错过了什么?
    • @JoeC:最好在 IDE 中提供简短但完整的示例,以便您检查它们。在这种情况下,您在无效的theChild 上调用start,并且您有一个parentReference 类型的变量而不是theParent。此外,您还没有声明一个名为 theChild 的字段,但您在父构造函数中分配给它。我想可能还有其他人——不确定。另外,我建议使用反映 Java 命名约定的名称,因为这会使奇怪的东西更加突出。
    【解决方案2】:

    由于您在 theParent 中使用该类,因此您实际上不需要限定它。

    但是,即使您不需要获得资格,也应该仍然可以获得资格。

    您收到错误的原因是 theEnum 是一个静态内部类,但 p.theEnum 限定符表示一个非静态内部类,它需要实例 p 作为实例化的一部分。在这里,枚举被声明为静态,因此限定它的正确方法是theParent.theEnum

    【讨论】:

    • 已经回答并投票选出了最有用(最快),但是关于量化它的正确方法非常有用,谢谢 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-30
    • 1970-01-01
    • 1970-01-01
    • 2010-12-10
    • 1970-01-01
    • 2011-07-09
    • 1970-01-01
    相关资源
    最近更新 更多