我有这种情况,我不确定为什么会这样,也许你可以帮我解决这个问题。
我有一个具有这种结构的 MyClass 类。 (有吸气剂和安装者)
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()是非静态的。
所以我的问题是为什么第二种方法不起作用,因为两种方法看起来都相同?
谢谢!
答案 0 :(得分:1)
最后我让它发挥作用。创建该地图的正确方法是
myMap = Stream.of(CONS_1, CONS_2).collect(Collectors.toMap(MyClass::getId, Function.identity()));
我不明白为什么编译器会抱怨静态方法。