繁体   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