加入收藏 | 设为首页 | 会员中心 | 我要投稿 晋中站长网 (https://www.0354zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

腾讯工作近十年大佬:不是我打击你!你可能真的不会写Java

发布时间:2019-07-02 16:11:34 所属栏目:优化 来源:程序员小姐
导读:文章核心 其实,本不想把标题写的那么恐怖,只是发现很多人干了几年 Java 以后,都自认为是一个不错的 Java 程序员了,可以拿着上万的工资都处宣扬自己了,写这篇文章的目的并不是嘲讽和我一样做 Java 的同行们,只是希望读者看到此篇文章后,可以和我一样

仔细看一下 set 方法,这样的设置便是 chain 的 style,调用的时候,可以这样使用:

  1. Student student = new Student() 
  2.  .setAge(24) 
  3.  .setName("zs"); 

相信合理使用这样的链式代码,会更多的程序带来很好的可读性,那看一下如果使用 lombok 进行改善呢,请使用 @Accessors(chain = true),看如下代码:

  1. @Accessors(chain = true) 
  2. @Setter 
  3. @Getter 
  4. public class Student { 
  5.  private String name; 
  6.  private int age; 

这样就完成了一个对于 bean 来讲很友好的链式操作。

静态构造方法

静态构造方法的语义和简化程度真的高于直接去 new 一个对象。比如 new 一个 List 对象,过去的使用是这样的:

  1. List<String> list = new ArrayList<>(); 

看一下 guava 中的创建方式:

  1. List<String> list = Lists.newArrayList(); 

Lists 命名是一种约定(俗话说:约定优于配置),它是指 Lists 是 List 这个类的一个工具类,那么使用 List 的工具类去产生 List,这样的语义是不是要比直接 new 一个子类来的更直接一些呢,答案是肯定的,再比如如果有一个工具类叫做 Maps,那你是否想到了创建 Map 的方法呢:

  1. HashMap<String, String> objectObjectHashMap = Maps.newHashMap(); 

好了,如果你理解了我说的语义,那么,你已经向成为 Java 程序员更近了一步了。

再回过头来看刚刚的 Student,很多时候,我们去写 Student 这个 bean 的时候,他会有一些必输字段,比如 Student 中的 name 字段,一般处理的方式是将 name 字段包装成一个构造方法,只有传入 name 这样的构造方法,才能创建一个 Student 对象。

接上上边的静态构造方法和必传参数的构造方法,使用 lombok 将更改成如下写法(@RequiredArgsConstructor 和 @NonNull):

  1. @Accessors(chain = true) 
  2. @Setter 
  3. @Getter 
  4. @RequiredArgsConstructor(staticName = "ofName") 
  5. public class Student { 
  6.  @NonNull private String name; 
  7.  private int age; 

测试代码:

  1. Student student = Student.ofName("zs"); 

这样构建出的 bean 语义是否要比直接 new 一个含参的构造方法(包含 name 的构造方法)要好很多。

当然,看过很多源码以后,我想相信将静态构造方法 ofName 换成 of 会先的更加简洁:

  1. @Accessors(chain = true) 
  2. @Setter 
  3. @Getter 
  4. @RequiredArgsConstructor(staticName = "of") 
  5. public class Student { 
  6.  @NonNull private String name; 
  7.  private int age; 

测试代码:

  1. Student student = Student.of("zs"); 

当然他仍然是支持链式调用的:

  1. Student student = Student.of("zs").setAge(24); 

这样来写代码,真的很简洁,并且可读性很强。

使用 builder

Builder 模式我不想再多解释了,读者可以看一下《Head First》(设计模式) 的建造者模式。

今天其实要说的是一种变种的 builder 模式,那就是构建 bean 的 builder 模式,其实主要的思想是带着大家一起看一下 lombok 给我们带来了什么。

看一下 Student 这个类的原始 builder 状态:

  1. public class Student { 
  2.  private String name; 
  3.  private int age; 
  4.  public String getName() { 
  5.  return name; 
  6.  } 
  7.  public void setName(String name) { 
  8.  this.name = name; 
  9.  } 
  10.  public int getAge() { 
  11.  return age; 
  12.  } 
  13.  public void setAge(int age) { 
  14.  this.age = age; 
  15.  } 
  16.  public static Builder builder(){ 
  17.  return new Builder(); 
  18.  } 
  19.  public static class Builder{ 
  20.  private String name; 
  21.  private int age; 
  22.  public Builder name(String name){ 
  23.  this.name = name; 
  24.  return this; 
  25.  } 
  26.  public Builder age(int age){ 
  27.  this.age = age; 
  28.  return this; 
  29.  } 
  30.  public Student build(){ 
  31.  Student student = new Student(); 
  32.  student.setAge(age); 
  33.  student.setName(name); 
  34.  return student; 
  35.  } 
  36.  } 

调用方式:

  1. Student student = Student.builder().name("zs").age(24).build(); 

(编辑:晋中站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读