从 Java 中的子类构造函数填充超类中的哈希图

Fill a hashmap in superclass from subclass constructor in Java

我有一个抽象的超级class,它在 JavaFX 中是这样设置的:

abstract class View {
protected static HashMap<String, View> viewMap;
View(){
    viewMap = new HashMap<String, View>();
}
public static void addMap(String key, View value){
    viewMap.put(key, value);
}

这个超级class包括方法:

public static VBox goToView (final String view){
    return viewMap.get(view).getView();
}

然后我有一些子classes代表我想要加载的场景设置如下:

public class SceneA extends View {

private static String title;

public ViewA() {

    title = "TitleA";

    super.addMap(title, this);
}

public VBox getPane(){
      //code that will load for this scene
}

后续的子class场景设置方式相同。 然后在主程序中我这样调用:

public class OrganizationMenu {

private Stage organization;
private static BorderPane border;

public OrganizationMenu() {

    stage = new Stage();

    border = new BorderPane();
    border.setCenter(View.goToView(ViewA.getTitle()));

这对第一个视图非常有效,但任何后续视图都不会添加到 superclass 的 HashMap 中。我不明白为什么。即使我将 ViewA 代码保存为 ViewB,只是更改引用,它也不会填充地图。为什么这对一个而不是其他视图有效?

我的理解是您有一个抽象 class 视图,这个 class 包含一个静态 HashMap viewMap。这个抽象 class 有一些 subclasses 并且每次实例化一个 subclass 时,您希望将 subclass 添加到 super [=19= 的 viewMap 对象中].

如果我是对的,那么超级 class 视图中的构造函数就是问题所在。每次实例化 subclass 时,viewMap 都会指向一个新的 HaspMap 对象作为 subClass

的构造函数

请删除构造函数代码并尝试这样:

abstract class View {

protected static HashMap<String, View> viewMap = new HashMap<String, View>();

public static void addMap(String key, View value) {
    viewMap.put(key, value);
}

希望这有效。