2
约书亚布洛赫提到在他的著作(有效的Java - 第2版)在项目4: -实用程序类如何将最终类的方法分组,而不是扩展类?
只包含静态字段和静态方法(实用 类)类可用于分组方法上最后一堂课,而不是 扩展班。
任何人都可以解释这句话吗?
约书亚布洛赫提到在他的著作(有效的Java - 第2版)在项目4: -实用程序类如何将最终类的方法分组,而不是扩展类?
只包含静态字段和静态方法(实用 类)类可用于分组方法上最后一堂课,而不是 扩展班。
任何人都可以解释这句话吗?
一个常见的错误是(或希望是)创建一个包含常用方法的类,然后使用继承以便能够通过需要方法的类轻松访问方法。
所以你会:
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,您都不能在接口中声明静态方法。