一叶笑天
雄关漫道真如铁, 而今迈步从头越。 从头越, 苍山如海, 残阳如血。
posts - 73,comments - 7,trackbacks - 0
有时候需要写一些只有静态方法和静态属性的类,由于他们不考虑实例化,因此有时候会被滥用。例如java.lang.Math和java.util.Arrays.在他们中使用了很多的静态方法包括工厂方法。
很多类被设计成不需要实例化,实例对他们来说是无意义的。他们缺少明确的构造器,但是编译器会给他们提供一个public的无参数的缺省构造器。对用户来说,这样的构造器是他们不能同其他的构造器区别。
其他使一个类抽象化来增强非实例化属性是不可行的。因为类能够被子类型话,子类型可以实例化。而且会使用户在考虑继承时被误导。缺省的构造器是在一个类没有明确的构造器的时候才会生成的,所以类需要通过增加一个private的构造器来增强非实例性。
// Noninstantiable utility class
public class UtilityClass {
// Suppress default constructor for noninstantiability
private UtilityClass() {
throw new AssertionError();
}

 
// Remainder omitted
}
因为构造器是private的,因此外界不能访问到。AssertionError不是一定需要的,但是他确保了万一构造器被内部类调用。它确保了在任何时候这个类都不会被实例化。同时私有的构造函数阻止了子类型话。
posted on 2008-06-19 10:24 一叶笑天 阅读(194) 评论(0)  编辑  收藏 所属分类: JAVA技术

只有注册用户登录后才能发表评论。


网站导航: