内部类声明和初始化

Thi*_*ira 4 java nested class object inner-classes

我习惯用C++编写代码,但必须将项目从C++转换为Java.在C++中使用数据结构非常简单.我试图复制相同的东西,但如Java内部类和静态嵌套类.在线阅读了几个例子,并尝试了不同的版本,到目前为止这是我得到的:

public class Main {
  public static void main( String[] args ) {
  ...
    ClassOuter outerObj = new ClassOuter();

    ClassOuter.DataInner value = outerObj.new ClassOuter.DataInner();
  }
}

class ClassOuter{

  public static class DataInner{
    public int x;
  }
  ...
  protected void getNo()
  { value.x=Integer.parseInt("493"); 
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试编译时,它给了我错误:

$ javac -cp "./" Main.java
Main.java:15: error: '(' expected
    ClassOuter.DataInner value = outerObj.new ClassOuter.DataInner();
Run Code Online (Sandbox Code Playgroud)

关于这里缺少什么的任何线索?

Era*_*ran 5

ClassOuter.DataInner value = outerObj.new ClassOuter.DataInner();
Run Code Online (Sandbox Code Playgroud)

此语法适用于内部类(即非静态嵌套类).如果这是您想要的,请static从中删除关键字public static class DataInner.

编辑:

也改变

ClassOuter.DataInner value = outerObj.new ClassOuter.DataInner();
Run Code Online (Sandbox Code Playgroud)

ClassOuter.DataInner value = outerObj.new DataInner();
Run Code Online (Sandbox Code Playgroud)

使用封闭实例初始化内部实例时,不指定外部类型.

并且该行在outerObj.value.x=Integer.parseInt("493");您的外部类的getNo()方法中无效,因为outerObj并且value只有main方法知道的局部变量.

如果希望外部实例更新其任何内部实例,则必须获取对它的引用.这是一种方法:

public class Main {
  public static void main( String[] args ) {
  ...
    ClassOuter outerObj = new ClassOuter();    
    ClassOuter.DataInner value = outerObj.new DataInner();
    outerObj.setInner (value);
  }
}

class ClassOuter{

  public static class DataInner{
    public int x;
  }
  ...
  private DataInner inner = null;
  public void setInner (DataInner inner) {
      this.inner = inner;
  }
  protected void getNo()
  {
      inner.x=Integer.parseInt("493"); 
  }
}
Run Code Online (Sandbox Code Playgroud)