如何在java中初始化静态对象数组
基本上,我想创建一个编译时已知值的数据结构。在C中,我会这样做:如何在java中初始化静态对象数组,java,Java,基本上,我想创建一个编译时已知值的数据结构。在C中,我会这样做: struct linetype { int id; char *descr; }; static struct linetype mylist[] = { { 1, "first" }, { 2, "second" } }; 我在Java中找到的唯一解决方案是在运行时创建数组: public class Outer { public class LineType { int id;
struct linetype { int id; char *descr; };
static struct linetype mylist[] = {
{ 1, "first" },
{ 2, "second" }
};
我在Java中找到的唯一解决方案是在运行时创建数组:
public class Outer {
public class LineType {
int id;
String descr;
private LineType( int a, String b) {
this.id = a;
this.descr = b;
}
}
LineType[] myList = {
new LineType( 1, "first" ),
new LineType( 2, "second" ),
};
这看起来既麻烦又无效(当结构变得长而复杂时)。还有别的办法吗
(注意:请忽略任何语法错误,因为这只是为该问题创建的示例代码。此外,我知道字符串不是指向数据段的字符指针。但是,该参数也适用于基本数据类型)。您可以使用初始化
在Java中,不能在编译时创建数组(数组是特殊类型的对象)。使用静态块的类加载时间(或作为实例变量的运行时)可以创建数组 静态块示例:
class TestClass
{
static {
arr[0] = "Hi";
arr[1] = "Hello";
arr[2] = "How are you?";
}
....
}
如果要避免使用新对象,可以使用
Map
而不是数组。请注意,第一个值(1、2等)必须始终是唯一的。看
私有静态映射myMap=newtreemap();
静止的{
myMap.put(1,“第一”);
myMap.put(2,“第二”);
}
必须将线型设置为静态类:
public class Outer {
public static class LineType {
int id;
String descr;
private LineType( int a, String b) {
this.id = a;
this.descr = b;
}
}
static LineType[] myList = {
new LineType( 1, "first" ),
new LineType( 2, "second" ),
};
}
除非有什么我不明白的,否则这应该很简单:
Object[][] mylist = {{1, "first"}, {2, "second"}};
如果数据结构真的非常混乱和复杂,并且您真的不想用它“混乱”您的代码,那么您可以在一个完全独立的小程序中创建它,并将其序列化/保存到磁盘。您的“真实”程序只是反序列化/读取它 当然,这确实掩盖了正在发生的事情,所以我会避免使用这种技术,除非你真的需要它
如果问题只是应用程序的初始加载速度太慢,那么可以使用延迟静态初始值设定程序。许多编码错误都是以效率为名犯下的:)好主意。这样,运行时初始化只会发生一次,而不是每次创建实例都会发生。您是对的,这会起作用。当然,访问将是通过索引进行的,您会丢失所有类型信息,因此这只能在非常简单的情况下作为一种解决方法(当性能优势可以忽略不计时)。您可以迭代数组。我只是好奇,你们看过枚举了吗?有点不相关,但很高兴知道,因为我可能需要关联数组访问。
public class Outer {
public static class LineType {
int id;
String descr;
private LineType( int a, String b) {
this.id = a;
this.descr = b;
}
}
static LineType[] myList = {
new LineType( 1, "first" ),
new LineType( 2, "second" ),
};
}
Object[][] mylist = {{1, "first"}, {2, "second"}};