簡體   English   中英

從Java中的子類構造函數填充父類中的哈希圖

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM