建议:通过私有化构造器强化不可实例化的能力。 野性酷女 2024-02-18 14:14 40阅读 0赞 有时候,你可能需要编写只包含静态方法和静态域的类。这些类的名称很不好,因为有些人在面向对象的语言中滥用这样的类来编写过程化的程序。尽管如此,他们也去世有他们特有的用处。我们可以利用这种类,以java.lang.Math或者java.util.Arrays的方式,把基本类型的值或者数组类型上的相关方法组织起来。我们也可以通过java.util.Collections的方式,把实现特定接口的对象上的静态方法(包括工厂方法)组织起来。最后,还可以利用这种类把final类上的方法组织起来,以取代扩展该类的做法。 这样的工具类(utility class)不希望被实例化,实例对它没有任何意义。然而,在缺少显示构造器的情况下,编译器会自动提供一个公有的、无参的缺省构造器(default constructor)。对于用户而言,这个构造器与其他的构造器没有任何区别。在已发行的API中常常可以看到一些被无意识地实例化的类。 企图通过将类做成抽象类来强制该类不可被实例化,这是行不通的。该类可以被子类化,并且该子类也可以被实例化。这样做甚至会误导用户,以为这种类是专门为了继承而设计的。然而,有一些简单的习惯用法可以确保类不可被实例化。由于只有当类不包含显示的构造器时,编译器才会生成缺省的构造器,因此我们只要让这个类包含私有构造器,他就不能被实例化了: // Noninstantiable utility class public class UtilityClass { // Suppress default constructor for noninstantiability private UtilityClass() { throw new AssertionError(); } ... // Remainder omitted } 由于显示的构造器时私有的,所以不可以在该类的外部访问它。AssertionError不是必须的,但是他可以避免不小心在类的内部调用构造器。它保证该类在任何情况下都不会被实例化。这种习惯用法优点违背直觉,好像构造器就是专门设计成不能被调用一样。因此,明智的做法就是在代码中增加一条注释。 这种习惯用法也有副作用,它使得一个类不能被子类化。所有的构造器都必须显示或隐式的调用超类(superclass)构造器,在这种情形下,子类就没有可访问的超类构造器可调用了。
相关 通过实例了解Java中构造器的作用 在Java编程中,构造器是一种特殊的方法,主要用于初始化新创建的对象。它们的主要作用体现在以下几个方面: 1. **对象的初始设置**:当使用new关键字创建一个类的新实例时 野性酷女/ 2024年09月11日 00:15/ 0 赞/ 51 阅读
相关 建议:通过私有化构造器强化不可实例化的能力。 有时候,你可能需要编写只包含静态方法和静态域的类。这些类的名称很不好,因为有些人在面向对象的语言中滥用这样的类来编写过程化的程序。尽管如此,他们也去世有他们特有的用处。我们可以 野性酷女/ 2024年02月18日 14:14/ 0 赞/ 41 阅读
相关 建议:用私有构造器或者枚举类型强化Singleton属性。 Singleton指仅仅被实例化一次的类。 Singleton通常被用来代表那些本质上唯一的系统组件,比如窗口管理器或者文件系统。使类成为Singleton会使它的客户端测试 我不是女神ヾ/ 2024年02月18日 14:13/ 0 赞/ 45 阅读
相关 通过私有构造器,使工具类不可实例化,也不可继承 //Noninstantiable utility class public class UtilityClass{ //Suppress d ╰+攻爆jí腚メ/ 2022年09月28日 13:21/ 0 赞/ 121 阅读
相关 Spring官方为什么建议构造器注入? ![0D5F937FE12312312D81F17F.jpg][] 程序员的成长之路 互联网/程序员/技术/资料共享 [关注][Link 1] 阅读本文大概需要 7 约定不等于承诺〃/ 2022年09月01日 10:57/ 0 赞/ 155 阅读
相关 4. 【创建和销毁对象】通过私有化构造方法强化不可实例化的能力 本文是《Effective Java》读书笔记第4条。 -------------------- 有的时候你需要编写只包含静态方法和静态域的类,这种类通常名声不好,因为有些 墨蓝/ 2022年08月19日 08:22/ 0 赞/ 133 阅读
相关 Java 静态代码块 实例化代码块 构造器 前提:C extends B extends A A static B static C static A instance A constructor 小咪咪/ 2022年04月24日 09:52/ 0 赞/ 170 阅读
相关 Effective Java:通过私有构造器强化不可实例化的能力 1 工具类(utility class) 只包含静态方法和静态域的类,例如: java.lang.Math、java.lang.Arrays等,把基本类型的值或者 Dear 丶/ 2022年02月24日 03:48/ 0 赞/ 144 阅读
相关 第四条:通过私有构造器强化不可实例化的能力 做法很简单: 1.提供私有的构造器。 2.在构造器中抛出Access异常。 通过以上2点可以保证该类在任何情况下都不会被实例化。 缺点:它使得一个类不能被子类化。所有的 朴灿烈づ我的快乐病毒、/ 2021年12月07日 11:31/ 0 赞/ 179 阅读
还没有评论,来说两句吧...