我正在将 C 代码重写为 Java,以便在基于 Android 的 BeagleBone Black 上运行。由于 java 中没有 struc 类型,因此我使用公共(public)静态类方法定义数据结构。然而,结构中有一系列子结构。作为一个模型,假设我们要定义一个名为 Satellites 的类。每个卫星中都有转发器,每个转发器都有信道信息。我试图弄清楚如何声明然后初始化类内的子类。我的基本定义是:
public static final int SATELLITE_MAX = 50;
public static final int TRANSPONDER_MAX = 24;
public static final int CHANNEL_MAX = 36;
public static class satellite_struct {
public string satId;
public string satName;
public string satLocation;
public class transponder_struct {
public int frequency;
public char polarity;
public class channels_struct {
public string channel_name;
public string encryption;
public int sid;
}
}
}
我可以实例化卫星结构类,如下所示:
satellite_struct satellites[] = new satellite_struct[SATELLITE_MAX]
但是,如何初始化此类中的 x 转发器和 y channel ?
谢谢。
最佳答案
“最简单”的解决方案是:
public static class satellite_struct {
public string satId;
public string satName;
public string satLocation;
public class transponder_struct {
public int frequency;
public char polarity;
public class channels_struct {
public string channel_name;
public string encryption;
public int sid;
}
public channels_struct[] channels = new channel_struct[ CHANNEL_MAX ];
}
public transponder_struct transponders = new transponder_struct[ TRANSPONDER_MAX ];
}
鉴于您定义了
satellite_struct satellites[] = new satellite_struct[SATELLITE_MAX];
然后您可以通过(例如)访问它们:
satellites[x].transponders[y].channels[z].channel_name
但是,您可能想用 Java 来实现它:
public static class Satellite {
public string satId;
public string satName;
public string satLocation;
public class Transponder {
public int frequency;
public char polarity;
public class Channel {
public string channel_name;
public string encryption;
public int sid;
}
public Channel[] channels = new Channel[ CHANNEL_MAX ];
}
public Transponder transponders = new Transponder[ TRANSPONDER_MAX ];
}
Java 中类名通常为大写。如果这是对现有结构的直接转换,则上面的操作应该可以,但您可能希望使用 List
或 SparseArray
而不是数组。
关于Java(适用于 Android)在类数组内定义和初始化类数组(类似 C 的结构),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27826682/