如何将一个类中创建的所有对象存储在该类在Java中返回的单个数组中?
我正在使用Java创建一个名为Track的对象,它包含由类中的方法(float、double、int等)创建的一组不同的数值对象。这个类Track将被另一个类多次实例化(另一个类的单个实例中有多个Track实例)。我希望track成为这些数字对象的数组,这样父类将包含多个track数组 Track类是这样构造的,嵌套在另一个类中,该类将有一个循环来根据需要多次实例化Track如何将一个类中创建的所有对象存储在该类在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
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函数,用于设置对象数组中的每个轨迹值。老实说,我对序列化/反序列化不太熟悉。我听说过,但从未真正阅读过它或有意使用过它。我希望我能让你的两个答案都成为可接受的答案,因为它们看起来都可以工作。这就是我选择另一个的原因一是因为它看起来更简单(不过我可能错了)。