假设我想初始化一个static final
数组,该数组是某个对象的N个副本(为简单起见,我们说String
)。我们必须内联初始化它,因为它是static final
,我们不能使用数组文字,因为它是可变长度的(或不可行的长):
static final int N = 10000;
static final String foo = "baz";
//create a static array of 10000 copies of "baz"
static final String[] STRINGS = make_array_of(foo, N);
有没有办法在Java中内联(也就是说,某些函数是否执行make_array_of
)?
答案 0 :(得分:1)
您可以使用静态初始值设定项:
private static final String[] ARRAY;
static {
// Initialize the array here
}
请注意,初始化程序必须在变量声明之后。
根据您的具体情况,Arrays
课程可以轻松实现:
static {
STRINGS = new String[N];
Arrays.fill(STRINGS, foo);
}
答案 1 :(得分:0)
在Java 8中,您可以尝试使用
Stream.generate(Supplier).limit(SIZE).toArray(Type[]::new);
(或者并行表现更好,但可读性稍差)
IntStream.range(0,SIZE).mapToObject(i->value).toArray(Type[]::new);
喜欢
private static final String[] ARRAY = Stream
.generate(() -> foo) //you can also generate value dynamically here
.limit(N)
.toArray(String[]::new);