Java(适用于 Android)在类数组内定义和初始化类数组(类似 C 的结构)

标签 java android data-structures

我正在将 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 中类名通常为大写。如果这是对现有结构的直接转换,则上面的操作应该可以,但您可能希望使用 ListSparseArray 而不是数组。

关于Java(适用于 Android)在类数组内定义和初始化类数组(类似 C 的结构),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27826682/

相关文章:

Java: byte[] 移位操作变成 short

java - android studio 错误 :Execution failed for task '*****_library:processReleaseManifest' . > 格式说明符 '20g'

android - 在Gradle多项目构建中使用不同的构建脚本名称

java - java中的链表反向函数

c - 帮助递归函数

PHP & MySQL 标记系统逻辑

java - GC 是否将内存释放回操作系统?

android - 如何使用 imageview onclick 保存位图图像

java - 在android中使用带有multipart的HttpUrlConnection上传文件的进度非常快

java - java中的Aes解密 - 填充问题