如何将一个类中创建的所有对象存储在该类在Java中返回的单个数组中?

如何将一个类中创建的所有对象存储在该类在Java中返回的单个数组中?,java,arrays,inner-classes,Java,Arrays,Inner Classes,我正在使用Java创建一个名为Track的对象,它包含由类中的方法(float、double、int等)创建的一组不同的数值对象。这个类Track将被另一个类多次实例化(另一个类的单个实例中有多个Track实例)。我希望track成为这些数字对象的数组,这样父类将包含多个track数组 Track类是这样构造的,嵌套在另一个类中,该类将有一个循环来根据需要多次实例化Track class Track { public int trackID() { } publ

我正在使用Java创建一个名为Track的对象,它包含由类中的方法(float、double、int等)创建的一组不同的数值对象。这个类Track将被另一个类多次实例化(另一个类的单个实例中有多个Track实例)。我希望track成为这些数字对象的数组,这样父类将包含多个track数组

Track类是这样构造的,嵌套在另一个类中,该类将有一个循环来根据需要多次实例化Track

class Track
{
    public int trackID()
    {
    }

    public short trackValidity()
   {
   }

  ....//other objects
} 

与通常声明数组一样,例如:

Track[] track = new Track[42];
track[0] = new Track();
或者作为完整的工作示例:

public class ObjectArray {

    Track[] track;

    public static void main(String[] args){
        ObjectArray tester = new ObjectArray();
        tester.setIt();
        tester.getIt();
    }

    public void setIt(){
        track = new Track[42];
        for(int i=0; i<42; i++){
            track[i]= new Track(i);
            track[i].calcProduct(i, i+1);
        }
    }

    public void getIt(){
        for(int i=0; i<track.length; i++){
            System.out.println("Track "+track[i].getSerial()+" has product: "+track[i].getProduct());
        }
    }

    class Track{
        private int serial;
        private int product;

        Track(int i){
            serial = i;
        }

        public void calcProduct(int a, int b){
            product = a*b;
        }

        public int getSerial() {
            return serial;
        }

        public int getProduct() {
            return product;
        }
    }
}
公共类ObjectArray{
轨道[]轨道;
公共静态void main(字符串[]args){
ObjectArray tester=新建ObjectArray();
tester.setIt();
tester.getIt();
}
公共无效setIt(){
轨道=新轨道[42];

对于(int i=0;i像您通常声明的数组一样,例如:

Track[] track = new Track[42];
track[0] = new Track();
或者作为完整的工作示例:

public class ObjectArray {

    Track[] track;

    public static void main(String[] args){
        ObjectArray tester = new ObjectArray();
        tester.setIt();
        tester.getIt();
    }

    public void setIt(){
        track = new Track[42];
        for(int i=0; i<42; i++){
            track[i]= new Track(i);
            track[i].calcProduct(i, i+1);
        }
    }

    public void getIt(){
        for(int i=0; i<track.length; i++){
            System.out.println("Track "+track[i].getSerial()+" has product: "+track[i].getProduct());
        }
    }

    class Track{
        private int serial;
        private int product;

        Track(int i){
            serial = i;
        }

        public void calcProduct(int a, int b){
            product = a*b;
        }

        public int getSerial() {
            return serial;
        }

        public int getProduct() {
            return product;
        }
    }
}
公共类ObjectArray{
轨道[]轨道;
公共静态void main(字符串[]args){
ObjectArray tester=新建ObjectArray();
tester.setIt();
tester.getIt();
}
公共无效setIt(){
轨道=新轨道[42];

对于(int i=0;iIMO),您可以创建一个函数来构建包含多个对象的对象数组:

public ArrayList getNumbers(){
    ArrayList array = new ArrayList();
    array.add(trackID());
    array.add(trackValidity());
    ...
    return array;
}
记住在从数组中获取对象时强制转换对象,例如,在位置0处(trackID)是一个int,因此当从数组列表中获取对象时,不要忘记强制转换:

Track myTrack = new Track();
//set track variables ...
ArrayList trackInfo = myTrack.getNumbers();
int trackID = (int) trackInfo.get(0);

在IMO中,您可以创建一个函数来构建包含多个对象的对象数组:

public ArrayList getNumbers(){
    ArrayList array = new ArrayList();
    array.add(trackID());
    array.add(trackValidity());
    ...
    return array;
}
记住在从数组中获取对象时强制转换对象,例如,在位置0处(trackID)是一个int,因此当从数组列表中获取对象时,不要忘记强制转换:

Track myTrack = new Track();
//set track variables ...
ArrayList trackInfo = myTrack.getNumbers();
int trackID = (int) trackInfo.get(0);


但是我如何告诉它将public short trackValidity(){}或其他对象的值放入该数组中?您需要保存整个Track实例还是只需要一个变量?在第一种情况下,使用
Track[0].trackValidity()获得它;
。第二种情况可能会使用不同于轨迹实例数组的东西。请记住,java使用引用变量,因此在每次计算中都应该使用
新轨迹()
-实例这实际上很有意义。我无法测试它,因为我只是为代码编写支架(目前大多数方法都是空的),但这看起来应该可以工作。由于某种原因,Track[]Track=new Track[42];不受欢迎。@cluemein有什么问题吗?我添加了一个完整的工作示例,这样您可以更好地看一看。但是我如何告诉它将public short trackValidity()的值放在或者该数组中的其他对象?您需要保存整个Track实例还是只需要一个变量?在第一种情况下,您可以通过
Track[0].trackValidity()获得它;
。第二种情况可能会使用不同于轨迹实例数组的东西。请记住,java使用引用变量,因此在每次计算中都应该使用
新轨迹()
-实例这实际上很有意义。我无法测试它,因为我只是为代码编写支架(大多数方法当前为空),但这看起来应该可以工作。由于某些原因,Track[]Track=new Track[42];不受欢迎。@cluemein有什么问题?我添加了一个完整的工作示例,以便您可以更好地查看。此方法是在Track类内部还是父类(外部类)内部?好的,我想我现在明白了。它会让Track像它自己的方法一样,最终将数组返回给父类,对吗?它就像一个序列化,你可以将对象的整个变量转换成一个对象数组。你会有问题去转换它们,因为你知道每个位置中有什么对象。你也可以做你自己的deserialize函数,用于设置对象数组中的每个轨迹值。老实说,我对序列化/反序列化不太熟悉。我听说过,但从未真正阅读过它或有意使用过它。我希望我能让你的两个答案都成为可接受的答案,因为它们看起来都可以工作。这就是我选择另一个的原因一个是因为它看起来比较简单(我可能错了)。这个方法是在Track类内部还是父类(外部类)内部?好的,我想我现在明白了。它会让Track像它自己的方法一样,最终将数组返回给父类,对吗?它就像一个序列化,你可以将对象的整个变量转换成一个对象数组。你会有问题去转换它们,因为你知道每个位置中有什么对象。你也可以做你自己的deserialize函数,用于设置对象数组中的每个轨迹值。老实说,我对序列化/反序列化不太熟悉。我听说过,但从未真正阅读过它或有意使用过它。我希望我能让你的两个答案都成为可接受的答案,因为它们看起来都可以工作。这就是我选择另一个的原因一是因为它看起来更简单(不过我可能错了)。