次のような抽象基本クラスと実装クラスがあります。
public abstract class Base
{
public Base getInstance( Class<? extends Base> clazz )
{
//expected to return a singleton instance of clazz's class
}
public abstract absMeth();
}
public A extends Base
{
//expected to be a singleton
}
この例では、Aをシングルトンにし、BaseでgetInstanceを記述して、呼び出しごとにAのシングルトンオブジェクトを返すことができます。これを行うと、次のようになります。
public abstract class Base
{
public Base getInstance( Class<? extends Base> clazz )
{
try
{
return clazz.getDeclaredMethod("getInstance").invoke(null,null);
}
}
public abstract void absMeth();
}
public A extends Base
{
private static A inst;
private A(){}
public static A getInstance( )
{
if( inst!= null)
inst = new A();
return inst;
}
public void absMeth(){
//...
}
}
しかし、私の懸念は、誰かが別のクラスを作成した場合class B extends Base
、それもシングルトンであり、getInstanceと呼ばれる静的メソッドを必ず実装するようにするにはどうすればよいですか?
言い換えれば、クラスで拡張するすべてのクラスの仕様としてこれを強制する必要がありますBase
。