使用混合数据类型将数据结构初始化为常量值

use*_*044 4 java

有没有办法在Java中将数据结构初始化为常量值?我搜索了高低,找不到任何这样的技术.我特别想要初始化一个包含混合数据类型的类,例如String和int.

class xyz {
      String a;
      int    b;
}

static final xyz example1 = { "string value", 42 };    // This doesn't work.

static final xyz[] example2 = { { "value a", 42 }, { "value b", 43 } };  // this also doesn't work
Run Code Online (Sandbox Code Playgroud)

我可以初始化String的数组,甚至是String的二维数组,但由于某种原因,我无法初始化记录结构或记录结构数组.我在Delphi中经常这样做,发现没有这个功能很难生存.

好吧,我已经编程了大约40年,所以我不是一个新手.我需要知道这样的事情是否可行.我确实希望嵌入在我的应用程序中的常量数据,而不是从文件中读入,并使用赋值语句来设置数据类型,从而无法将它们声明为常量(最终).

感谢您的任何建议或意见.我真的想找到一个很好的解决方案,因为我有很多Pascal代码转换为Java,我不想重新设计所有的数据结构.

ass*_*ias 9

如果您不想使用其他答案中提出的构造函数或静态块,则可以使用双括号初始化语法:

static final xyz example1 =
  new xyz() {{ a = "string value"; b = 42; }}; 
Run Code Online (Sandbox Code Playgroud)

请注意,它会创建一个匿名类.
你的第二个例子如下:

static final xyz[] example1 = new xyz[] {
  new xyz() {{ a = "value a"; b = 42; }},
  new xyz() {{ a = "value b"; b = 43; }}
};
Run Code Online (Sandbox Code Playgroud)

但是,如果您可以访问xyz该类,则添加带有两个参数的构造函数将更具可读性并且(稍微)更高效.