[英]Static/Final java classes?
我想强制在我的父类的任何扩展类上实现单例模式。 也就是说,我只想要每个子类的一个实例(可以通过Child.INSTANCE或类似的东西访问)。
理想情况下,我想要创建Child.INSTANCE对象,然后没有其他类型的Parent对象。
目前我通过以下方式获取我的实例:
public class Child extends Parent {
public static final Child INSTANCE = new Child();
....
我想知道,java类可以以某种方式变成静态或某种东西吗?
谢谢=]
它可以做到,但我没有看到这一点。 你最好使用枚举恕我直言。
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.