私は最近、次のように使用される遅延読み込み手法に恋をしました。
public class SomeClass
{
static class ComplexClassHolder
{
static ComplexClass complex = new ComplexClass(); // takes a long time
}
static double someMethod(int x, int y)
{
return ComplexClassHolder.complex.calculate(x,y);
}
public double quickMethod() // if only this method is called there is no initialization of the instance of ComplexClass
{
return 1.0+1.0;
}
}
しかし、非静的メソッドでも同様の手法が可能ですか?
例
import java.util.Random;
public class SomeClass
{
final int seed;
public SomeClass(int seed)
{
this.seed=seed;
}
class ComplexClassHolder
{
Random r = new Random(SomeClass.this.seed); // let's pretend this takes a long time
}
public double randomDouble()
{
return ComplexClassHolder.r.nextDouble();
}
}
問題は、ComplexClassHolder と ComplexClassHolder.r が静的ではないため、上記が不可能なことです。ただし、それらを静的にすると、SomeClass.this.seed にアクセスできなくなります。
私は getInstance() と同期でそれを行うことができることを知っていますが、静的なケースで可能なエレガントなテクニックが何らかの形でここでも使用できれば本当に感謝しています.