gpt4 book ai didi

java - 从Java中的子类构造函数填充父类(super class)中的 HashMap

转载 作者:行者123 更新时间:2023-12-01 11:36:45 24 4
gpt4 key购买 nike

我有一个抽象父类(super 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);
}

这个父类(super class)包括方法:

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

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

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
}

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

public class OrganizationMenu {

private Stage organization;
private static BorderPane border;

public OrganizationMenu() {

stage = new Stage();

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

这对于第一个 View 非常有效,但任何后续 View 都不会添加到父类(super class)的 HashMap 中。我不明白为什么。即使我将 ViewA 代码保存为 ViewB,仅更改引用,它也不会填充 map 。为什么这适用于一个 View 而不适用于其他 View ?

最佳答案

我的理解是你有一个抽象类View,这个类包含一个静态HashMap viewMap。这个抽象类有一些子类,每次实例化子类时,您都希望将该子类添加到父类(super class)的 viewMap 对象中。

如果我是对的,那么父类(super class) View 中的构造函数就是问题所在。每次实例化子类时,viewMap 都会指向一个新的 HaspMap 对象作为子类的构造函数

请删除构造函数代码并尝试如下:

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);
}

希望这能起作用。

关于java - 从Java中的子类构造函数填充父类(super class)中的 HashMap ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29895545/

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