0

我有一个主类,Simulator有一个主函数,我将在其中运行模拟。在 main 函数中Simulator,我希望能够同时声明一个对象包含一个Atoms和一个时间步长的位置。 MovesMoveAtom

为此,我设置了以下包层次结构:

//Simulator.java
import particle_simulator.*;

public class Simulator{
   public static void main(String args[]){
   ...
   }
}

//particle_simulator/Atom.java
package particle_simulator;

public class Atom{
   ...
   public Atom (){
   ...
   }

   class Move implements Comparable<Move>{
     public Atom atom;

     ...

      public Move (Atom atom, double time){
         ...
      }
}

当我尝试Atoms在 main 函数中声明时,Simulator我没有收到任何错误。但是,当我尝试在其中声明Moves时,出现以下错误:

$javac Simulator.java
Simulator.java:46: cannot find symbol
symbol  : class Move
location: class Simulator
         move_queue.add(new Move(atoms.get(i),5));

为什么不能Simulator.java创建Move对象?

4

2 回答 2

2

如果要独立于 Atom 构建内部类,则需要将其设为 public 和 static:

public class Atom {

    public static class Move {

    }

}


public class Simulator {
    public static void main (String[] args) {
        new Atom.Move();

    }
}
于 2013-11-06T19:12:06.923 回答
0

您需要提供公共访问权限并从 Atom 实例创建它

package particle_simulator;

public class Atom{
  ...
   public Atom (){
    ...
   }

   public class Move implements Comparable<Move>{
       public Atom atom;

        ...

   public Move (Atom atom, double time){
     ...
  }
}

// In Simulator
    Atom a = new Atom();
    Atom.Move m = a.new Move(a, adouble);

如果对您正在做什么没有太多了解,我认为将 Move 作为 Atom 的内部类是没有意义的。为什么不把它放在自己的文件中?

于 2013-11-06T19:04:31.210 回答