我有一个抽象类,有点像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
}
}