[英]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.