4.使用私有构造方法来避免实例化
2019-01-23 本文已影响0人
Orange_____
在平常的项目中可能会需要到很多工具类, 但是这些工具类, 它只提供静态方法, 以及静态变量, 并不希望别人去实例化, 这个时候, 可以将构造器设置成私有的, 并在构造器中加入防止实例化对象的代码, 例如抛出异常
public final class NetworkUtils {
private NetworkUtils() {
throw new RuntimeException("This class can't create objects, It just an util class");
}
// 通过网卡名获取其对应的不是回环的ipv4地址
public String getNotLoopbackIpv4AddressByNetworkCardName(String networkCardName) {
// TODO get ip address
return null;
}
}
使用抽象类来构建工具类避免实例化的想法是不好的, 因为调用者可能会以为该类是可以被继承的
在Java8以后接口可以声明静态方法, 并且接口是不能被实例化的, 看起来接口貌似可以来当做工具类使用, 但他跟抽象类有一个共同的缺点, 那就是会被子类继承
如果一定要使用这两种方法的话, 尽量要在类的注释中说明该类是不可以被继承的, 这样可以尽可能的避免误继承