【问题标题】:An enclosing instance that contains <my reference> is required需要包含 <my reference> 的封闭实例
【发布时间】:2011-05-16 22:04:39
【问题描述】:

包含的封闭实例是必需的

下面是代码。 positionObj 是我正在尝试使用的对象,它给了我上述错误。

原因不明。

package toolBox;
import toolBox.Secretary.positionObj;    

public class PositionManagement {
    public static HashMap<String, Secretary.positionObj> main(String vArg){
        positionObj newPosition=new positionObj();
    }
}

【问题讨论】:

    标签: java instance


    【解决方案1】:

    首先创建一个 Outer 类的对象。在这种情况下,我认为“秘书”。然后创建 positionObj。像这样,

    Secretary x = new Secretary();
    Secretary.positionObj y = x.new positionObj();
    

    【讨论】:

    • 谢谢! ...我从 v 1.0 开始使用 Java,但我不知道你能做到这一点!
    • 或者你可以内联Secretary.positionObj y = newSecretary().new positionObj();
    【解决方案2】:

    正确的通用签名应该是

    public static HashMap<String, positionObj> main(String vArg)
    

    您不需要限定 positionObj,因为您已经导入了它。

    但是,我很确定 main 方法必须符合下面的签名。如果您打算让 main 成为您程序的主要方法,请将签名更改为

     public static void main(String[] args) {...}
    

    您可以创建一个单独的静态方法,该方法返回一个 Map 并从 main 调用它。

    请注意,所有类都应以大写字母开头,positionObj 应为 PositionObj。

    【讨论】:

    • 嘿,省略了一些代码。同意这个案子。该类确实返回了一些东西,但错误就在这里,我不清楚为什么。
    • @jason,我认为你不能从 main 返回任何东西。
    【解决方案3】:

    您正在尝试使用非静态内部 positionObj 类,而没有 Secretary 的实例。
    非静态内部类必须属于其父类的实例

    您可能应该将positionObj 更改为普通类或静态内部类。

    或者,您可以编写someSecretary.new positionObj() 来创建属于someSecretary 实例的内部类的实例。

    【讨论】:

    • 同意,但这个一般性陈述有点不清楚。你能提供一个例子或指出我可能更好地解释这一点的地方吗?谢谢
    • 是的。我在尝试调试时意识到,如果我将我的 positionObj 设置为静态它可以工作(在它的秘书类中)。我很高兴,现在一切正常,但感谢您的指点。将调查此错误的实际原因。
    • 错误的实际原因是你没有给一个父实例。不要使用非静态内部类,除非您确实需要一个并且您了解它们的工作原理c2.com/ppr/wiki/JavaIdioms/NoPublicInnerClasses.html
    • 两种解决方案都能完美运行 [1- 将 positionObj 类设为静态,2- 使用 OuterClass.new classObj() ]。谢谢
    • 是的。但是,您需要充分了解您的代码库才能确定哪个是正确的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-28
    • 1970-01-01
    • 2013-12-26
    • 2012-11-20
    • 1970-01-01
    • 1970-01-01
    • 2011-12-12
    相关资源
    最近更新 更多