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

时间:2012-11-13 10:31:25

标签: java android abstract-class

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

我的想法是

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

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

  • 创建一个子类,其唯一目的是设置超类的静态成员,并在结尾处将它们为null,类似于超类“静态内容”的远程控制。

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

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

2 个答案:

答案 0 :(得分:0)

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

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.
    }
}

答案 1 :(得分:0)

您可以直接初始化它们:

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
    }
}