何时/如何初始化抽象类的静态成员?(无延迟加载)



我有一个抽象类,有点像Android的View。我创建了很多类来扩展它以绘制不同的东西。现在我希望所有这些类共享相同的 Paint,以便颜色匹配等等。

我的想法是

  • 将一些上下文或窗口度量传递给每个构造函数,但这感觉很愚蠢,因为我只需要一次。

  • 我可以在抽象类中添加一个静态方法 init(),但我尽量避免使用公共静态方法。

  • 创建一个子类,其目的只有一个,用于设置超类的静态成员,并在最后将它们清空,类似于对超类静态内容的远程控制。

我只是不确定有什么风险,或者是否有更简单的方法可以做到这一点。

编辑:要初始化静态成员,我需要一个上下文(对于那些不熟悉 android 的人),并且该上下文需要传递给该类,因此静态块等中没有 init

或者

只是添加一个静态块并在那里初始化它们:

public abstract class Foo {
    public static final int DEFAULT_PAINTS_SIZE = 5;
    public static Paint [] paints;
    static {
        paints = new Paints[DEFAULT_PAINTS_SIZE];
        // initialize the values somehow.
    }
}

您可以直接初始化它们:

public class MyClass {
    private static MyStatic myStaticObject = new MyStatic();
}

或在静态初始值设定项块中:

public class MyClass {
    private static MyStatic myStaticObject;
    static {
        //something = stuff
        myStaticObject = new MyStatic(something);
        //more stuff
    }
}

最新更新