gpt4 book ai didi

java - Java中静态代码块中字段初始化的正确方法

转载 作者:行者123 更新时间:2023-12-02 00:57:11 26 4
gpt4 key购买 nike

我只是想知道基于给定的代码块,jvm 中的对象初始化是否有任何差异。如果是这样,哪一种是正确的做法?

enum FlagType {

NOT_DEFINED(0, null),
TEST(1, Constants.TEST),
PROD(5, Constants.PROD),
QA(8, Constants.QA);

private final Integer id;
private final String value;

private static final Map<Integer, FlagType> cacheValueById;

static {
Map<Integer, FlagType> valueById = Arrays.stream(FlagType.values())
.collect(Collectors.toMap(FlagType::getId,
Function.identity()));
cacheValueById = valueById;
}
}


enum FlagType {

NOT_DEFINED(0, null),
TEST(1, Constants.TEST),
PROD(5, Constants.PROD),
QA(8, Constants.QA);

private final Integer id;
private final String value;

private static final Map<Integer, FlagType> cacheValueById;

static {
cacheValueById = Arrays.stream(FlagType.values())
.collect(Collectors.toMap(FlagType::getId,
Function.identity()));
}
}

最佳答案

没有实际区别,只是使用变量使代码更加冗长。

将值赋给变量,然后将变量赋给字段与直接赋给字段之间的区别与在返回该变量之前赋给变量与仅返回值没有太大区别:变量不'不需要真正添加任何内容(除非您需要抑制警告或类似内容)。

事实上,它会损害代码,因为那里有更多“东西”,比如变量类型和名称。这些是否有助于读者理解?

在这种情况下,首先分配给变量不会增加任何值,因此不要使用它。

也就是说,更好的方法是根本不使用静态初始化 block 。只需在字段声明上分配即可。

private static final Map<Integer, FlagType> cacheValueById = 
Arrays.stream(FlagType.values())
.collect(Collectors.toMap(FlagType::getId,
Function.identity()));

关于java - Java中静态代码块中字段初始化的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61205735/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com