2013-05-21 16 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,您都不能在接口中声明静态方法。