簡體   English   中英

靜態/最終的java類?

[英]Static/Final java classes?

我想強制在我的父類的任何擴展類上實現單例模式。 也就是說,我只想要每個子類的一個實例(可以通過Child.INSTANCE或類似的東西訪問)。

理想情況下,我想要創建Child.INSTANCE對象,然后沒有其他類型的Parent對象。

目前我通過以下方式獲取我的實例:

public class Child extends Parent {
    public static final Child INSTANCE = new Child();
    ....

我想知道,java類可以以某種方式變成靜態或某種東西嗎?

謝謝=]

您的子課程集是固定的嗎? 如果是這樣,請考慮使用enum

public enum Parent {
    CHILD1 {
        // class definition goes here
    },

    CHILD2 {
        // class definition goes here
    };

    // common definitions go here
}

由於OP提到了狀態模式,這里有兩個基於enum的狀態機的例子: 一個簡單的一個復雜的

它可以做到,但我沒有看到這一點。 你最好使用枚舉恕我直言。

enum {
  Singleton, 
  Child { /* override methods here * }
}

但是,要回答您的問題,您可以執行以下操作

class SingletonParent {
   private static final Set<Class> classes = new CopyOnArraySet();
   { if (!classes.add(getClass()) throw new AssertionError("One "+getClass()+" already created."); }
}

你正在尋找錯誤的設計模式。

看一下Factory模式。 工廠可以創建一個類的單個實例,然后將其交給任何想要它的人。 工廠可以分發父母,任何孩子或其他任何你想要的單身人士。

您可以使用Java enum 基本上它會產生一堆公共靜態類(就像你一樣),但對它們有一些限制。

public enum Child {
   INSTANCE;
}

請注意, enums是完整的類,因此如果您願意,可以根據每個實例輕松添加方法。

我會回答一個問題,我回答過一段非常相似的問題。 我相信這會做你想做的事情,但會附帶答案中提到的所有限制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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