首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >静态/最终java类?

静态/最终java类?
EN

Stack Overflow用户
提问于 2011-01-04 00:23:47
回答 5查看 675关注 0票数 4

我想在父类的任何扩展类上强制实现单例模式。也就是说,我只希望每个子类都有一个实例(可以通过Child.INSTANCE或类似的方式访问)。

理想情况下,我希望创建Child.INSTANCE对象,然后不创建其他类型为Parent的对象。

目前,我通过如下方式获取实例:

代码语言:javascript
运行
复制
public class Child extends Parent {
    public static final Child INSTANCE = new Child();
    ....

我想知道,java类能以某种方式成为静态类吗?

谢谢=]

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-01-04 00:30:08

你的子类的集合是固定的吗?如果是这样,请考虑使用enum

代码语言:javascript
运行
复制
public enum Parent {
    CHILD1 {
        // class definition goes here
    },

    CHILD2 {
        // class definition goes here
    };

    // common definitions go here
}

由于OP提到了状态模式,下面是enum-based状态机的两个示例:a simple onea complex one

票数 9
EN

Stack Overflow用户

发布于 2011-01-04 00:32:11

这是可以做到的,但我看不出有什么意义。您最好使用枚举IMHO。

代码语言:javascript
运行
复制
enum {
  Singleton, 
  Child { /* override methods here * }
}

但是,为了回答您的问题,您可以执行以下操作

代码语言:javascript
运行
复制
class SingletonParent {
   private static final Set<Class> classes = new CopyOnArraySet();
   { if (!classes.add(getClass()) throw new AssertionError("One "+getClass()+" already created."); }
}
票数 1
EN

Stack Overflow用户

发布于 2011-01-04 00:32:56

您看到的是错误的设计模式。

看一看工厂模式。工厂可以创建类的单个实例,然后将其分发给任何需要它的人。工厂可以分发父类、任何子类或您想要的任何其他元素的单例。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4586194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档