在Java中,有没有办法强制实现我的界面是单例?我想要确保的接口是由具有单个实例的类实现的 - 这是我可以用抽象类做的事情吗?
编辑:更多上下文
我正在实现一个框架,该框架定义了一个平台接口,我只需要每个实现的实例,因为它将被大量使用。
答案 0 :(得分:1)
我可以在那里向你展示一个肮脏的伎俩:
static public abstract class SingletonAbc {
static private final HashSet<Class<?>> mInstancedClasses = new HashSet<>();
public SingletonAbc() { // CTOR should be thread-safe imo, check that to be sure
final Class<?> c = getClass();
System.out.println("Checking Class: " + c.getName());
if (mInstancedClasses.contains(c)) throw new IllegalStateException("Damn, cannot instantiate the class " + c.getName() + " twice!");
else mInstancedClasses.add(c);
}
}
static public class Ext1 extends SingletonAbc {}
static public class Ext2 extends SingletonAbc {}
static public class Ext1Ext1 extends Ext1 {}
static public class Ext1Ext2 extends Ext1 {}
public static void main(final String[] args) {
new Ext1();
new Ext2();
new Ext1Ext1();
new Ext1Ext2();
new Ext2(); // <= bam! exception!
}
但请记住,这可能不是最佳解决方案。多线程和反射等因素可能会破坏这种方法。