美文网首页
工具类不应该有公有的构造函数

工具类不应该有公有的构造函数

作者: 珊珊宝贝Catherine | 来源:发表于2018-05-10 11:50 被阅读15次

java 项目中使用的工具类非常多,比如JDK自己的工具java.lang.Math 、java.util.Collections 等都是我们经常用到的工具类。工具类的属性和方法都是静态的,不需要生成实例即可访问,而且JDK也做了很好的处理,由于不希望被初始化,于是设置了构造函数为private的权限,表示除了此类本身外,谁都不能产生一个实例。

java.lang.Math的部分代码
public final class Math {
    /**
     * Don't let anyone instantiate this class.
     */
    private Math() {}
}

Math的构造函数设置成了private了:我就是一个工具类,我只想其它类通过类名来访问,我不想通实例对象访问。这在平台型和框架型项目中已经足够了。但是已经告诉你不能这么做了,你还是要实例Math类来访问属性和静态方法(java反射是如此的发达,修改一个构造函数的访问权限易如反掌),这样就确保不了正确性了,隐藏的问题随时都可能爆发!那我们在项目开发中有没有更好的限制办法呢?有,不仅仅设置成private访问权限,还要抛异常,代码实例如下:

public class LdapUtils {
    private LdapUtils() {
            throw new Error("请不要实例化我!");
    }
}

这样做才能确保工具类才能不会被实例化,并且保证所有访问都是通过类名来进行的。需要注意的是,此工具类不能做继承的打算,因为如果子类可以实例化的话,那就要调用父类的构造函数,可以父类没有被访问的构造函数,于是问题自然而然就出现了。

相关文章

  • 工具类不应该有公有的构造函数

    java 项目中使用的工具类非常多,比如JDK自己的工具java.lang.Math 、java.util.Col...

  • java子类调用父类构造器函数

    子类 调用 父类的构造函数:(构造函数不会被继承,只是被子类调用而已) 1、子类所有的 构造函数 默认调用父类的无...

  • AsyncQueryHandler 源码学习

    原文链接 ContentProvider 的单线程执行工具类 构造函数 在构造函数中需要传入 ContentRes...

  • Kotlin学习笔记——基础语法篇之类和对象

    类的构造 Kotlin类的写法 Kotlin类的构造函数分为主构造函数和二级构造函数 主构造函数的特点——函数名为...

  • kotlin-第三章(类与对象)

    构造函数 访问修饰符 伴生对象 单例类 动态代理 kotlin中特有的类 09:kotlin的构造函数 kotli...

  • 构造函数

    构造函数 构造函数的数组的应用 类中包含类,并且给类传参 析构函数(逆构造函数):每个构造函数都析构函数,谁最先构...

  • Dart中的面向对象

    默认情况相爱所有的类都继承自Object类 1.类的定义 & 构造函数 2.类的初始化列表 3. 构造函数的重定...

  • C++ 从入门到放弃 (Day-07)

    父类的构造函数 ◼ 子类的构造函数默认会调用父类的无参构造函数◼ 如果子类的构造函数显式地调用了父类的有参构造函数...

  • 构造函数 Kotlin的类包括1个主构造函数和多个次构造函数。 主构造函数 其中主构造函数会紧跟类名进行声明。 声...

  • C# 构造函数总结

    构造函数 构造函数分为:实例构造函数,静态构造函数,私有构造函数。 实例构造函数 1、构造函数的名字与类名相同。 ...

网友评论

      本文标题:工具类不应该有公有的构造函数

      本文链接:https://www.haomeiwen.com/subject/fjjzrftx.html