我遇到了这种情况,我不确定为什么会发生这种情况,也许你可以帮助我。
我有一个具有这种结构的类MyClass。 (带有 getter 和 setter)
public class MyClass {
private String id;
private String title;
private boolean anyBoolean;
我添加了一些静态属性,例如我们
public class MyClass {
public static final Group CONS_1 = new Group("cons_1","Cons 1", false);
public static final Group CONS_2 = new Group("cons_2","Cons 2", true);
private String id;
private String title;
private boolean anyBoolean;
public MyClass(String id, String title, boolean anyBoolean) {
this.id = id;
this.title = title;
this.anyBoolean = anyBoolean;
}
仅供引用,我没有使用枚举,因为我必须序列化所有属性,而使用枚举时,它仅序列化名称。 后来我意识到有一种方法可以通过 ID 公开这些常量,例如
public static Map<String, MyClass> myMap;
我尝试了一种基本方法,例如
static {
myMap = new HashMap<>();
myMap.put(CONS_1.getId(), CONS_1);
}
显然,它确实有效。 但我想知道是否可以使用 Stream 来做到这一点,例如
myMap = Stream.of(CONS_1, CONS_2).collect(Collectors.groupingBy(MyClass::getId));
但是不起作用,因为 getId() 是非静态的。
所以我的问题是为什么第二种方法不起作用,因为两种方法看起来是等效的?
谢谢!
最佳答案
终于我让它发挥作用了。创建该 map 的正确方法是
myMap = Stream.of(CONS_1, CONS_2).collect(Collectors.toMap(MyClass::getId, Function.identity()));
我不明白为什么编译器会提示静态方法。
关于java - 从常量构建静态 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40224699/