美文网首页
【教3妹学编程-java实战5】结构体字段赋值的几种方式

【教3妹学编程-java实战5】结构体字段赋值的几种方式

作者: 程序员小2 | 来源:发表于2023-10-28 13:06 被阅读0次
    早上好

    2哥 :3妹,考考你,你知道java结构体字段的赋值都有哪些方式吗?
    3妹:神马?结构体赋值不是在代码中随处可见的嘛,直接set不就行了嘛, 还有很多种方式?

    惊讶
    2哥 :没错,直接set就其中一种,不过如果字段比较多的话,一个个set也比较麻烦, 代码行数也比较多,影响阅读啊。
    3妹 :代码行数比较多怎么啦,放在30年前,程序员可是按照代码行数算工资的, 代码行数多还能拿更多的钱呢,哈哈哈。
    哈哈

    2哥 :时代在进步嘛,作为一个有追求的程序媛,你还知道其他set字段的黑科技吗?让我们来学习一下吧~

    考考你

    用例

    首先,假设有一个结构体Person,用于后面的事例演示。 为简化篇幅,只有2个字段,实际应用中结构体的字段可能会比较多,也一样适用。

    @Data
    public class Person {
        /**
         * 姓名
         */
        private String name;
    
        /**
         * 年龄
         */
        private Integer age;
    }
    

    方法一:直接set

    这个没什么好说的, 最基础的用法

    Person person = new Person();
    person.setName("张三");
    person.setAge(18);
    

    方法二:构造函数

    在结构中手写带参数的构造函数,也可以用lombok的@AllArgsConstructor注解

    @AllArgsConstructor
    @Data
    public class Person {
        /**
         * 姓名
         */
        private String name;
    
        /**
         * 年龄
         */
        private Integer age;
    }
    

    赋值:

    //简化为一行代码
    Person person = new Person("张三", 18);
    

    方法三:Builder

    可以在结构体中手写一个builder, 也可以用lombok的@Builder注解

    //buidler注解
    @Builder
    @Data
    public class Person {
        /**
         * 姓名
         */
        private String name;
    
        /**
         * 年龄
         */
        private Integer age;
    
        public Person(Builder builder) {
            this.name = builder.name;
            this.age = builder.age;
        }
    
      //手写builder
        public static class Builder {
    
            /**
             * 姓名
             */
            private String name;
    
            /**
             * 年龄
             */
            private Integer age;
    
            public Builder setName(String name) {
                this.name = name;
                return this;
            }
    
            public Builder setAge(Integer age) {
                this.age = age;
                return this;
            }
    
            public Person build(){
                return new Person(this);
            }
        }
    

    赋值:

    Person person = Person.Builder().setName("张三").setAge(18).build();
    

    用builder给字段赋值的好处是链式一次性set完所有字段。

    方法四:@Accessors注解

    @Accessors(chain=true)
    链式访问,该注解设置chain=true,生成setter方法返回this(也就是返回的是该对象),代替了默认的返回void。

    @Accessors(chain=true)
    @Data
    public class Person {
        /**
         * 姓名
         */
        private String name;
    
        /**
         * 年龄
         */
        private Integer age;
        }
    

    赋值:

    Person person = new Person().setName("张三").setAge(18);
    

    Accessors(chain=true) 注解与@Builder注解相比,不用再build

    方法五:全局配置 lombok.accessors.chain=true

    那么问题来了,如果有很多个结构体,就需要在每个结构体上都加注解或写代码。 有没有统一设置的方式呢? 有的,
    lombok.assessors.chain=true|false
    如果设置为true,没有任何类被@Accessors注解,或者有类被注解但是没有为chain参数显式赋值,则表现为@Accessors(chain=true)

    小结:

    以上介绍了5种结构体字段赋值的方法,读者可以根据习惯自行选择。 楼主比较常用的是加@Accessors(chain=true) 注解,或者设置全局的lombok.assessors.chain=true.

    相关文章

      网友评论

          本文标题:【教3妹学编程-java实战5】结构体字段赋值的几种方式

          本文链接:https://www.haomeiwen.com/subject/tnzpidtx.html