Dou*_* P. 3 java memory inheritance static-methods java-8
我正在将一些旧的Java 4代码更新为Java 8(这里粘贴太多了)并且原始程序员选择了几乎每个类的他们都扩展了这个单独的HUGE类,只有静态方法和常量,但我不知道他们的推理.
例如:
public class BaseClass{
/* this class has a huge amount of ONLY static methods/constants */
public static final int STUFF_DONE = 1;
public static String getStuff(){
String stuff = "this is my stuff.";
return stuff;
}
...
}
public class SuperClass extends BaseClass{
/* this class has only a few methods */
public String labelStuff(){
return getStuff();
}
}
public class MyClass extends SuperClass{
/* there are many classes that extend SuperClass like this one */
public int handleStuff(){
String myString = labelStuff();
return STUFF_DONE;
}
public static void main(){
if(handleStuff()) System.out.println("Done.");
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是......保持这种设计是否更好,或者更好地删除静态方法/常量的继承并简单地静态调用这些方法/常量?
对我来说"更好"被定义为较低的内存消耗(同样,这个基类非常庞大),因为CPU很可能不受此影响.这种方法有哪些好处/陷阱?
我担心的是,因为BaseClass是如此巨大,以至于我在继承类中只使用一两个方法/常量浪费了大量内存,我可以静态调用它.
静态成员本身不是"继承"的.无论从哪个子类调用它们,它们都存在于基类中,因此我怀疑存在任何内存影响.
将所有类创建为此公共类的子类的原因只是为了便于访问没有限定类名的静态成员.一种常见的变体是从声明一堆静态字段的接口继承.好处是实现接口不会像超类那样干扰继承(你只能扩展一个超类).缺点是,在Java 8之前,无法在接口上声明静态方法.
无论如何,这个技巧通常被认为是一种反模式,并且已被静态导入所取代.