java利用构建器来创建实例而不是构造器


java如何创建实体类自定义注解以及相应的处理器来将秒数转换为年月日时分秒格式_java


一个类中

重载多个构造器


java如何创建实体类自定义注解以及相应的处理器来将秒数转换为年月日时分秒格式_java实例_02


静态工厂方法与构造器不同的

第一大优势为:他们有名称

第二大优势为:不必每一次调用他们的时候创建一个新对象

第三大优势为:他们可以返回原返回类型的任何子类型的对象

第四大优势为:所返回的对象的类随着每次调用发生变化,这取决于静态方法的参数值

下面是静态工厂方法的一些惯用名称

1)from---------------------类型转换方法

Date d = Date.from(instant)

2)of------------------------聚合方法,带有多个参数,返回该类型的一个实例,把他们合并起来

Set faceCard = EnumSet.of(JACK,QUEEN,KING)

3)valueOf-----------------比前两个更繁琐的方法BigInteger prime = BigInteger.valueOf(Integer.MAX_VALUE)

一个构造器中有多个参数时


java如何创建实体类自定义注解以及相应的处理器来将秒数转换为年月日时分秒格式_Java_03


简而言之,重叠构造器模式可行,但当有更多的参数是,客户端的代码会看起来非常糟糕。
javaBean看起来强于上述的重叠构造器模式,但同时也会带来多线程下不安全的问题

那么,我们的构建器出场了。


java如何创建实体类自定义注解以及相应的处理器来将秒数转换为年月日时分秒格式_构造器_04


Main.java

public class Main
{
 public static void main(String[] args)
 {
 //初始化一个NutritionFacts实例,一定要最后调用build()方法去调用NutritionFacts类的构造器去实例化NutritionFacts的对象
 NutritionFacts cocaCola = new NutritionFacts.Builder(120,200).calories(1).carbohydrate(22).build();
 //并且参数由客户端调用时决定,并不是一定要固定输入参数,改进写重载很多构造器给用户带来麻烦
 //javaBean改进了重载一大堆构造器的问题,却也带来了线程不安全的问题
 NutritionFacts cocaCola1 = new NutritionFacts.Builder(223,233).build();
 }
}

NutritionFacts.java


java如何创建实体类自定义注解以及相应的处理器来将秒数转换为年月日时分秒格式_构造器_05


java如何创建实体类自定义注解以及相应的处理器来将秒数转换为年月日时分秒格式_java_06