[英]Fill a hashmap in superclass from subclass constructor in Java
我有一个在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);
}
该超类包括以下方法:
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()));
这对于第一个视图非常有用,但是不会在超类的HashMap中添加任何后续视图。 我不明白为什么。 即使将ViewA代码另存为ViewB,只是更改引用,它也不会填满地图。 为什么要为一个视图而不是其他视图工作?
我了解的是您有一个Abstract类View,该类包含一个静态HashMap viewMap。 这个抽象类具有一些子类,并且每次实例化一个子类时,您都希望将该子类添加到超类的viewMap对象中。
如果我是对的,那么超类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);
}
希望这行得通。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.