如何解决"需要包含XY的封闭实例"?

Jam*_*ame 37 java netbeans inner-classes

我正在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
}
Run Code Online (Sandbox Code Playgroud)

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

public X.Y oY = new X.Y();
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:

需要包含XY的封闭实例

请帮我解决这个错误.

ada*_*ost 79

首先,您必须创建X类(外部类)objX.new InnerClass()的对象,然后使用语法来创建Y类的对象.

尝试,

X x=new X();
X.Y y=x.new Y();
Run Code Online (Sandbox Code Playgroud)

  • 哇!我今天倾身了!奇怪的语法.非常好!+1 (8认同)
  • 有谁知道他们为什么用这种方式制作语言?这有什么用途? (2认同)

Hug*_*ugh 34

你想声明静态内部类:public static class Y.

  • 因为OP没有提到它需要保持非静态.如果他需要封闭的实例,他将评论编译器错误,使其成为静态,并从他的问题中学到更多. (2认同)
  • 此答案的+1 - 接受的答案并不完全完整,因为它假定从非静态上下文中需要该类.就我而言,这不是真的. (2认同)

小智 8

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

public class X
{
    public static class Y {
    }
}
Run Code Online (Sandbox Code Playgroud)