我有一个抽象类,有点像Android的视图。我创建了很多类来扩展它以绘制不同的东西。现在我希望所有这些类共享相同的Paints,以便颜色匹配等等。
我的想法是
将一些上下文或windowmetrics传递给每个构造函数,但这感觉很愚蠢,因为我只需要它一次。
我可以在抽象类中添加静态方法init(),但我尽量避免使用公共静态方法。
创建一个子类,其唯一目的是设置超类的静态成员,并在结尾处将它们为null,类似于超类“静态内容”的远程控制。
我只是不确定存在哪些风险,或者是否有更简单的方法可以做到这一点。
编辑: 初始化静态成员我需要一个上下文(对于那些不熟悉android的人)并且需要将该上下文传递给该类,因此静态块中没有init等
答案 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
}
}