【发布时间】:2009-05-15 15:47:19
【问题描述】:
我有一些用作单例的类。它们共享一些基本功能,并从通常不用作 Singleton 的库中扩展相同的祖先。
如果我将通用功能放在继承自共同祖先的基类中,我会得到一个实例化没有意义的类,因此我将其抽象化。此外,因为这些类都用作单例,所以它们都应该有一个 init() 和一个 getInstance() 方法,它们都是静态的。所有的构造函数当然都是非公开的。
现在,由于 static 是抽象方法的非法修饰符,因此以下内容不起作用,尽管这正是我想要的:
class Base extends LibraryClass {
protected Base() {
// ... constructor
}
// ... common methods
// ILLEGAL!
public static abstract void init();
public static abstract <T extends Base>T getInstance();
}
class A extends Base {
private static A _INSTANCE;
private A() {
super();
}
public static void init() {
_INSTANCE = new A();
}
public static A getInstance() {
return _INSTANCE;
}
}
我可以忽略基类中的非法行并完成它。但是如何表达 Base 的每个子节点必须有这些方法呢?
【问题讨论】:
标签: java inheritance singleton