gpt4 book ai didi

Java 8 : Better to extend class of static methods or better to call static methods directly?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:23:14 28 4
gpt4 key购买 nike

我正在将一些旧的 Java 4 代码更新到 Java 8(这里粘贴的太多了),最初的程序员选择让他们的几乎每个类都扩展这个只有静态方法和常量的巨大类,但我不知道他们的推理。

例如:

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 是如此之大,以至于我在继承类中仅使用一两个方法/常量而浪费了很多内存,而我只能静态调用这些方法/常量。

最佳答案

静态成员本身并不是“继承”的。无论从哪个子类中调用它们,它们都存在于基类中,因此我怀疑是否存在任何内存影响。

将所有类都创建为这个公共(public)类的子类的原因只是为了方便访问没有限定类名的静态成员。一个常见的变体是从声明一堆静态字段的接口(interface)继承。好处是实现接口(interface)不会像父类(super class)那样干扰继承(您只能扩展一个父类(super class))。缺点是,在 Java 8 之前,无法在接口(interface)上声明静态方法。

无论如何,这个技巧通常被认为是一种反模式,并已被 static imports 取代。 .

关于Java 8 : Better to extend class of static methods or better to call static methods directly?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35977844/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com