Declaring and initializing an inner class

I use C ++ code, but I need to convert the project from C ++ to Java. In C ++, using a data structure is pretty simple. I am trying to reproduce the same, but for example, a Java inner class and a static nested class . After reading a few examples on the Internet and trying different versions, so far this is what I got:

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"); 
  }
}

However, when I try to compile, this gives me an error:

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

Any clues about what's missing here?

+4
source share
2 answers
ClassOuter.DataInner value = outerObj.new ClassOuter.DataInner();

This syntax applies to inner classes (i.e. non-stationary nested classes). If you need to, remove the keyword staticfrom public static class DataInner.

:

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

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

- .

outerObj.value.x=Integer.parseInt("493"); getNo(), outerObj value , .

, , . :

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"); 
  }
}
+5

DataInner :

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

class ClassOuter {
    public static class DataInner {
        public int value;
    }
}

DataInner ClassOuter.

DataInner .

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

class ClassOuter {
    public class DataInner {
        public int value;
    }
    public DataInner newInner() {
        return new DataInner();
    }

DataInner ClassOuter (ClassOuter.this).

+1

All Articles