【问题标题】:How can I resolve "an enclosing instance that contains X.Y is required"?如何解决“需要包含 X.Y 的封闭实例”?
【发布时间】:2011-11-28 23:44:43
【问题描述】:

我正在 Netbeans 中开发一个小型桌面应用程序。这是我的第一个程序,我面临着一种非常奇怪的错误。我知道我做错了什么,但无法追踪我做错了什么:(

请帮我解决这个错误。

说明: 我有一个默认包 Src,我正在根据需要在这个包中创建新的 Java 类。与其他课程一起,我创建了一个课程X,如下所示:

public class X
{
    public class Y
    {//some member functions and variables exist here}

    public class Z
    {//some member functions and variables exist here}

    //some member functions and variables exist here
}

现在我需要在同一个包中存在的其他类中创建内部类之一的实例,如下所示:

public X.Y oY = new X.Y();

但我收到以下错误:

需要一个包含 X.Y 的封闭实例

请帮我解决这个错误。

【问题讨论】:

标签: java netbeans inner-classes


【解决方案1】:

您要声明静态内部类:public static class Y

【讨论】:

  • 因为 OP 没有提到它需要保持非静态。如果他需要封闭实例,他会评论编译器错误,使其成为静态,并从他的问题中了解更多信息。
  • +1 对于这个答案 - 接受的答案并不完全完整,因为它假设类是非静态上下文所必需的。就我而言,这不是真的。
【解决方案2】:

首先你要创建一个X类(外部类)的对象,然后使用objX.new InnerClass()语法创建一个Y类的对象。

试试,

X x=new X();
X.Y y=x.new Y();

【讨论】:

  • 哇!我今天倾斜了一些东西!奇怪的语法。很不错! +1
  • 有谁知道他们为什么用这种方式制作语言?这有什么用?
  • 抱歉这里回复晚了,我相信它能够同时支持静态嵌套类和非静态嵌套类。我不是专家,但从我所阅读的内容来看,我相信这是强制从属类成为父类(非静态)实例的成员,并为不需要的从属类创建不同的语法父母(静态)。 docs.oracle.com/javase/tutorial/java/javaOO/nested.html
【解决方案3】:

将 Y 声明为静态以避免创建 X 的实例。

public class X
{
    public static class Y {
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-16
    • 1970-01-01
    • 1970-01-01
    • 2013-12-26
    • 1970-01-01
    • 2019-06-06
    • 2012-11-20
    相关资源
    最近更新 更多