Java 无法访问mProgram类型的封闭实例。必须使用mProgram类型的封闭实例限定分配

Java 无法访问mProgram类型的封闭实例。必须使用mProgram类型的封闭实例限定分配,java,class,syntax-error,Java,Class,Syntax Error,我试图从我的NrlData类调用,但下面的一行一直给我一个错误 public static class NrlMain { public static void main(String[] args) { NrlData nrlData = new NrlData();//No enclosing instance of type mProgram is accessible. Must qualify the allocation with an enclosing i

我试图从我的NrlData类调用,但下面的一行一直给我一个错误

public static class NrlMain {
    public static void main(String[] args) {
        NrlData nrlData = new NrlData();//No enclosing instance of type mProgram is accessible. Must qualify the allocation with an enclosing instance of type mProgram (e.g. x.new A() where x is an instance of mProgram).

关于如何解决这一问题的任何帮助都将非常有用

您需要使
NrlData
静态
或从封闭类的实例创建它

例如:


在创建内部类的实例之前,您必须先创建一个mProgram实例,或者您可以将内部类(在这种情况下是NrlData)声明为静态的,但是您仍然需要mProgram类来访问它(但不必实例化它)

public class mProgram {
    public class NrlData {
        ...
    }

    public static void main(String[] args) {
        mProgram.NrlData nrlData = new mProgram().new NrlData();
    }

    public void aMethod() { // accessing inner class from the "this" instance
        NrlData nrlData = new NrlData();
}

仅以第一种情况为例,其中NrlData不是静态的

在mProgram类中的非静态函数中,您不需要创建mProgram实例,因为它使用
this
实例

现在,如果您试图从另一个类访问内部类,因为您没有任何mProgram实例,您必须首先创建该实例。这就是为什么您只在NrlMain中存在问题,而不在mProgram中存在问题的原因

public class NrlMain {
    public void accessingInnerClass() {
        // Creating the mProgram instance
        mProgram mprogram = new mProgram();
        // Creating inner class instance
        mProgram.NrlData nrlData = mprogram.new NrlData();
    }
}

你能提供我们所有的
NrlMain
?NrlData是一个内部类?mProgram是包含NrlData的类?你能提供NrlData的代码吗?你的类是如何组织的?NrlData在另一个类中?我有一个主类“mProgram”在那门课上,我还有5门课。这包括NrlData和NrlMain。你能解释一下为什么吗?对不起,我是个新手java@user2297518-如果内部类被标记为
静态
,则除了
静态
变量之外,它无法访问任何其他内容。如果内部类未被标记为静态,则它是一个真正的内部类,因此可以从其父类中的对象访问变量,但显然,必须有其父类的对象才能访问。使用您的代码,您在NrlMain中将NrlData作为私有类。我将其作为单独的公共类。您在上面说,
NrlData
mProgram
中-我的是等效的,就在
NrlMain 相反,如果它是一个单独的公共类,你就不会有这个问题。如果我将NrlData声明为static,我将如何访问它?我这样做了,结果那一行不再有错误,但我在另外两行有相同的错误,我会在代码中指出。你说你的mProgram cl中有5个类驴:你必须用同样的语法访问它们。我对其他类没有任何问题,NrlMain是唯一一个有这些错误的类。我终于解决了。不过谢谢你的帮助!
public class mProgram {
    public static class NrlData {
        ...
    }

    public static void main(String[] args) {
        mProgram.NrlData nrlData = new mProgram.NrlData();
    }
}
public class NrlMain {
    public void accessingInnerClass() {
        // Creating the mProgram instance
        mProgram mprogram = new mProgram();
        // Creating inner class instance
        mProgram.NrlData nrlData = mprogram.new NrlData();
    }
}