我正在將一些舊的Java 4代碼更新到Java 8(這裏粘貼的方式太多了),而原始程序員幾乎選擇了他們的每個類擴展這個僅包含靜態方法和常量的單個HUGE類,但我確實不知道他們的推理。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非常龐大,我只能在靜態調用的繼承類中只使用一個或兩個方法/常量,浪費了大量內存。
爲什麼它是反模式有很多原因,但這個答案基本上是正確的:這是一個非常糟糕的做法,它應該被取消。一個主要原因是它將每個類與靜態方法超類聯繫起來。而這些類別中的任何一個都不能延伸其他任何東西 – VGR
Java 5中引入了關於Java 4代碼和靜態導入問題的事實解釋了動機(儘管即使在Java 5子類化中易於導入也被認爲是反模式)。不過,值得考慮的是將龐大的類拆分爲幾個較小的類,也許按主題分離實用方法,因爲當使用靜態導入而不是繼承時,Java的單一繼承不再是問題。 – Holger