在Java中的单个包文件中定义多个自定义对象
我有一个主类,在Java中的单个包文件中定义多个自定义对象,java,Java,我有一个主类,Simulator,它有一个主函数,我将在其中运行模拟。在模拟器的主要功能中,我希望能够声明原子和移动,其中移动对象包含一个原子和一个时间步 为此,我设置了以下包层次结构: //Simulator.java import particle_simulator.*; public class Simulator{ public static void main(String args[]){ ... } } 及 为什么不能Simulator.java创建Move
Simulator
,它有一个主函数,我将在其中运行模拟。在模拟器
的主要功能中,我希望能够声明原子
和移动
,其中移动
对象包含一个原子
和一个时间步
为此,我设置了以下包层次结构:
//Simulator.java
import particle_simulator.*;
public class Simulator{
public static void main(String args[]){
...
}
}
及
为什么不能
Simulator.java
创建Move
对象?您需要提供公共访问并从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);
package粒子模拟机;
公共类原子{
...
公共原子(){
...
}
公共类移动实现了可比性{
公共原子;
...
公共移动(原子,双倍时间){
...
}
}
//在模拟器中
原子a=新原子();
原子移动m=a.新移动(a,双);
在不太了解您正在做什么的情况下,我认为将Move作为Atom的内部类是没有意义的。为什么不将其放在自己的文件中呢?如果您想构建独立于Atom的内部类,您需要将其公开且静态:
public class Atom {
public static class Move {
}
}
public class Simulator {
public static void main (String[] args) {
new Atom.Move();
}
}
因为Move是Atom.o的一个内部类,所以要访问它,您需要
(new Atom()).new Move()
我同意。我想创建一个包层次结构,其中Simulator
使用particle\u Simulator
包,该包同时包含Atom
和Move
在同一级别。但是,如果它们在同一级别,我不知道如何授予Move
访问Atom
的权限。也许我可以拥有模拟器
使用particle\u模拟器
,它包含Move
和Move
使用另一个包含Atom
的包,但这似乎很奇怪。这是我的最佳选择吗?“如果它们处于同一级别,我不知道如何给Atom提供Move访问权限。”如果你理解模拟器是如何访问Atom的,那你怎么会不知道你的问题的答案呢?这是可行的,但我得到了一个警告:$javac Simulator.java-Xlint Simulator.java:46:warning:[unchecked]未选中调用add(E)作为原始类型java.util.PriorityQueue move\u queue.add的成员(new Atom.move(atoms.get(I),5));^1警告
我应该担心该警告吗?该警告让您知道PriorityQueue接受参数化类型。`PriorityQueue谢谢。我已将参数化类型添加到PriorityQueue,现在没有收到错误或警告。
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);
public class Atom {
public static class Move {
}
}
public class Simulator {
public static void main (String[] args) {
new Atom.Move();
}
}