2013-05-21 25 views

回答

1

一個常見的錯誤是(或希望是)創建一個包含常用方法的類,然後使用繼承以便能夠通過需要方法的類輕鬆訪問方法。

所以你會:

class Utility { 
    static utilityMethod() { 
     // do something usefull 
    } 
} 

class Application extends Utility { 
    someMethod() { 
     utilityMethod(); 
    } 
} 

然而,這符面向對象的原則,ApplicationClass從未應該是一個子類的UtilityClass。相反,您應該使用:

final class Utility { 
    Utility() { 
     // avoid instantiation 
    } 

    static utilityMethod() { 
     // do something useful 
    } 
} 

class Application { 
    someMethod() { 
     UtilityClass.utilityMethod(); 
    } 
} 

現在有幾種方法可以讓Java語言設計人員使上述更吸引人的用法。一個是靜態進口的概念。另一個是使接口具有在其上定義的靜態方法的可行性。在這種情況下,上面會變成:

import static Utility.utilityMethod; 

final interface Utility { 
    static utilityMethod() { 
     // do something useful 
    } 
} 

class Application { 
    someMethod() { 
     utilityMethod(); 
    } 
} 

這是一個整體短了很多,尤其是因爲大多數的進口會被自動地由IDE處理。關於上面的更多討論/指針可以在here找到。請注意,直到幷包括Java 7,您都不能在接口中聲明靜態方法。