从 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);
}
希望这有效。
我有一个抽象的超级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);
}
希望这有效。