详解:Java 的静态工厂方法

静态工厂方法在Java中提供了比构造器更多的灵活性,如命名自由、避免频繁创建对象、返回子类实例以及简化泛型使用。此外,它还可以减少参数混淆、控制对外属性的暴露,并提供统一修改的入口,增强类的控制力。使用静态工厂方法可以提高代码的可读性和可维护性,尤其是在需要控制实例创建和类型安全的情况下。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 序:什么是静态工厂方法
  2. Effective Java
  • 2.1 静态工厂方法与构造器不同的第一优势在于,它们有名字
  • 2.2 第二个优势,不用每次被调用时都创建新对象
  • 2.3 第三个优势,可以返回原返回类型的子类
  • 2.4 第四个优势,在创建带泛型的实例时,能使代码变得简洁
  1. 除此之外
    3.1 可以有多个参数相同但名称不同的工厂方法
    3.2 可以减少对外暴露的属性
    3.3 多了一层控制,方便统一修改
  2. 总结

1. 序:什么是静态工厂方法

在 Java 中,获得一个类实例最简单的方法就是使用 ​ ​new​​​ 关键字,通过构造函数来实现对象的创建。

就像这样:

Fragment fragment = new MyFragment();
    // or
    Date date = new Date();

不过在实际的开发中,我们经常还会见到另外一种获取类实例的方法:

Fragment fragment = MyFragment.newIntance();
    // or 
    Calendar calendar = Calendar.getInstance();
    // or 
    Integer number = Integer.valueOf("3");

↑ 像这样的:不通过 ​ ​new​​​,而是用一个静态方法来对外提供自身实例的方法,即为我们所说的​ ​静态工厂方法(Static factory method)​​。

知识点:​ ​new​​ 究竟做了什么?

简单来说:当我们使用 new 来构造一个新的类实例时,其实是告诉了 JVM 我需要一个新的实例。JVM 就会自动在内存中开辟一片空间,然后调用构造函数来初始化成员变量,最终把引用返回给调用方。

2. Effective Java

在关于 Java 中书籍中,《Effective Java》绝对是最负盛名几本的之一,在此书中,作者总结了几十条改善 Java 程序设计的金玉良言。其中开篇第一条就是『 考虑使用静态工厂方法代替构造器 』,关于其原因,作者总结了 4 条(第二版),我们先来逐个看一下。

2.1 静态工厂方法与构造器不同的第一优势在于,它们有名字

由于语言的特性,Java 的构造函数都是跟类名一样的。这导致的一个问题是构造函数的名称不够灵活,经常不能准确地描述返回值,在有多个重载的构造函数时尤甚,如果参数类型、数目又比较相似的话,那更是很容易出错。

比如,如下的一段代码 :

Date date0 = new Date();
Date date1 = new Date(0L);
Date date2 = new Date("0");
Date date3 = new Date(1,2,1);
Date date4 = new Date(1,2,1,1,1);
Date date5 = new Date(1,2,1,1,1,1);

—— D

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值