在想创建一个对象的时候,尽量使用静态工厂方法(static factory method)来代替构造方法。
比如:Boolean b = Boolean.valueOf(true);
而非Boolean b = new Boolean(true);
好处之一,与构造方法不同,方法是有名字的。在弄一些类似DSL的时候,可能会比较有用。与其要记住很多构造参数的含义,不如用一个命名良好的方法来概括。
String.BlankStringWithLen(20)看上去要比new String(" ",20)要友好一些?
好处之二,就像各种工厂类一样,在返回常量的情况下,可以不用每次都创建一个新的对象。在空间上比较节省。
好处之三,构造方法的返回类型是一定的,即该类本身;而方法可以返回其子类的类型。比如所有的子类都没有public的构造方法,而通过公开父类的一系列静态工厂方法来提供使用的界面。如此一来,使用者将要使用到的类就会少很多,便于保持一个清晰的接口。
分享到:
相关推荐
本篇文章将深入探讨静态工厂方法代替构造函数的使用方法以及它们的优缺点。 首先,我们来看一下静态工厂方法的基本形式。一个典型的静态工厂方法可能如下所示: ```java public static Boolean valueOf(boolean b)...
1. **工厂模式**:通过将构造函数设置为私有,可以实现一个工厂方法来代替直接的构造函数调用。这种方法允许类的内部逻辑控制如何创建对象,同时保持了类的封装性。例如,可以通过一个静态工厂方法`makeShape()`来...
17. 使用私有静态工厂方法代替构造函数。 18. 优先考虑使用私有构造函数和公有工厂方法。 19. 使用私有构造函数实现不可实例化的工具类。 20. 使用枚举来实现Singleton模式。 21. 避免创建不必要的对象。 22. 使用...
- **静态工厂方法**:使用静态工厂方法代替构造函数,因为它们可以拥有特定的名字,避免不必要的对象创建,且可以返回任何子类的对象,增加灵活性。 - **Singleton模式**:用于确保一个类只有一个实例,并提供一个...
3. 单例模式:推荐使用静态工厂方法代替公有构造函数实现单例。 四、异常处理 1. 异常类型:尽量避免使用`Exception`作为抛出的异常类型,应具体到某种异常,如`IOException`。 2. try-catch-finally:`finally`块...
4. **静态工厂方法代替构造函数**:对于无状态的类,鼓励使用`Objects.requireNonNull()`等静态工厂方法。 5. **改进的字符串处理**:如`isBlank()`, `strip()`, `stripIndent()`, 和 `stripTrailing()`方法。 6. **...
为了充分利用这个版本,开发者应了解Java 11引入的新特性和改进,例如局部变量类型推断(var关键字)、HTTP客户端API、静态工厂方法代替构造函数创建集合等。同时,遵循最佳实践,如合理配置JVM参数以优化性能,理解...
5. **静态工厂方法代替构造函数**: 对于`Optional`、`Stream`等类,推荐使用静态工厂方法创建实例。 6. **增强型switch表达式**: switch语句可以返回值,且支持模式匹配,提高了代码的简洁性。 7. **删除了过时API...
4. **静态工厂方法代替构造函数( sealed classes)**:增强了类的封装性,控制了子类的扩展。 5. **文本块(Text Blocks)**:在Java 13引入,11中没有,但在后续版本中,这是一个显著提升代码可读性的特性,特别是...
2. `DistributedLock`使用构造函数注入,或设计为可配置,便于测试时不实际使用分布式锁。 3. 对异常处理进行优化,明确抛出预期的异常类型。 4. 可以考虑将`execute()`方法中的逻辑进一步拆分,使每个部分更专注且...
58. **使用`async`构造函数需谨慎**:由于构造函数不能被异步调用,需要确保异步操作在其他地方处理。 59. **遵循ISP原则**:接口单一原则,避免一个接口包含不相关的操作。 60. **避免过度使用反射**:反射可能...
576.2 一般描述符方法 586.3 使用HBufC堆描述符 616.4 外部化和内部化描述符 626.5 TFileName的过度使用 646.6 在描述符操纵方面有用的类 646.7 小结 66第7章 动态数组与缓冲区 687.1 CArrayX类 697...
4. 使用`new`和`delete`:优先使用`new`和`delete`进行动态内存分配,它们会自动调用构造函数和析构函数。确保正确使用数组版本的`delete[]`。 5. C++风格注释:使用行内注释`//`,避免使用`/*...*/`块注释,以防止...
6. **静态工厂方法**:推荐使用静态工厂方法代替传统的构造器,因为它们可以有更具描述性的名称,并且不需要创建一个新的类实例就能调用。 7. **类型推断增强**:Java 1.8增强了类型推断,使得编译器能更好地推断出...
3. 依赖注入:通过构造函数或setter方法注入依赖,减少硬编码,提高测试性和可维护性。 五、数据库操作 1. SQL优化:避免全表扫描,合理设计索引,避免在`WHERE`子句中使用`!=`或`<>`操作符。 2. 数据库连接管理:...
9. **项9:使用静态工厂方法代替构造器** 静态工厂方法有命名自由、不需暴露构造器、可以返回原类型或子类型的实例等优势。 10. **项10:考虑提供一个无参构造器用于序列化** 序列化时,如果类没有无参构造器,...
16. **避免在循环中创建对象**:循环内创建大量对象可能导致内存溢出,尽可能提前创建或使用静态工厂方法。 17. **合理使用集合的size()**:在循环中避免频繁调用size(),可以先存入变量以提升性能。 18. **避免...
3. **优先考虑静态工厂方法而非构造器**:静态工厂方法比公有构造器更灵活,它们不需要在每次实例化时都创建一个新的类实例,还可以返回已缓存的实例或限制对象的创建。 4. **使用不可变对象**:不可变对象一旦创建...
28. **避免使用默认构造函数**:类的默认构造函数可能会引起未预期的行为,考虑总是明确指定构造函数。 29. **单元测试**:编写单元测试以验证代码功能,确保代码的正确性。 30. **持续学习和实践**:编程是一门...