美文网首页
【教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.

相关文章

  • 结构体 静态类

    定义三维向量结构体Vector3,字段有x,y,z 创建该结构体变量并赋值,输出该结构体变量中的成员的值 字段 属...

  • 13 C结构体

    1、why结构体? 2、结构体的初始化 3、结构体的几种定义方式

  • HMSET

    HMSET 使用结构体,为hash表添加字段。并利用结构体,将hash表的字段的值取出并赋值到结构体 使用普通命令...

  • Go struct 类型的 map 结构体成员不能修改的问题

    原文链接:golang 结构体作为map的元素时,不能够直接赋值给结构体的某个字段[https://blog.cs...

  • 2018-03-02

    不太理解的结构体赋值 今天在看结构体的时候,发现结构体居然还有以下两种方式可以赋值,点语法和冒号,这个里面有什么渊...

  • 结构体

    1.命令结构声明 2.相同类型的字段可以写在一行 3.匿名结构体声明 4.实例化命令结构体 5.匿名结构体创建 6...

  • C/C++基础(3)

    结构体 定义结构体的方式 结构体赋值 相同类型的两个结构体变量,可以相互赋值把t1成员变量的值拷贝到t2成员变量的...

  • 纸质计算机书

    1 Java Web编程实战宝典 2王道考研系列操作系统计算机组成原理数据结构计算机网络 3Java编程思想 4设...

  • Java编程老司机教你玩转数据结构

    Java编程的工具包提供了非常强大的数据结构,在Java编程中的数据结构呢,主要是包括以下几种接口和类:向量,枚举...

  • C中的结构体

    C语言的结构体生成以及赋值方法,打点调用,以及->调用 赋值总结:如何取出以及赋值结构体中的成员变量1.结构体变量...

网友评论

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

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