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.");
}
}
我的问题是……保持这种设计是否更好,或者更好地删除静态方法/常量的继承并简单地静态调用这些方法/常量?
对我来说“更好”被定义为较低的内存消耗(同样,这个基类非常庞大),因为CPU很可能不受此影响.这种方法有哪些好处/陷阱?
我担心的是,因为BaseClass是如此巨大,以至于我在继承类中只使用一两个方法/常量浪费了大量内存,我可以静态调用它.
解决方法:
静态成员本身不是“继承”的.无论从哪个子类调用它们,它们都存在于基类中,所以我怀疑是否存在任何内存影响.
将所有类创建为此公共类的子类的原因只是为了便于访问没有限定类名的静态成员.一种常见的变体是从声明一堆静态字段的接口继承.好处是实现接口不会像超类一样干扰继承(你只能扩展一个超类).缺点是,在Java 8之前,无法在接口上声明静态方法.
在任何情况下,这个技巧通常被认为是反模式,并已被static imports取代.
标签:java,java-8,memory,inheritance,static-methods 来源: https://codeday.me/bug/20190727/1555667.html