Java14 新增record 关键字

record生成的构造方法,和一般的class的构造使用方式没什么区别:

Person person = new Person(“John Doe”, “100 Linda Ln.”);

作者ps:其实这里看生成的代码会发现,其实他是创建了个final的Person类,然后继承了java.lang.Record,不过Record类也是final的,我们自己写代码的时候是没法继承的。

3.2、生成的getters方法


用record关键字后,同样为我们生成了getters方法,只不过和我们传统使用的调用有点区别,看下面的测试用例:

@Test

public void givenValidNameAndAddress_whenGetNameAndAddress_thenExpectedValuesReturned() {

String name = “John Doe”;

String address = “100 Linda Ln.”;

Person person = new Person(name, address);

assertEquals(name, person.name());

assertEquals(address, person.address());

}

它生成的是不含get前缀的。

3.3、生成的equals方法


用record关键字后,同样为我们生成的对应的equals方法,测试用例如下:

@Test

public void givenSameNameAndAddress_whenEquals_thenPersonsEqual() {

String name = “John Doe”;

String address = “100 Linda Ln.”;

Person person1 = new Person(name, address);

Person person2 = new Person(name, address);

assertTrue(person1.equals(person2));

}

只要是同一个对象,或是每个字段都相等,就会是true。

3.4、生成的hashCode方法


和equals一样,为我们生成的hashCode方法,测试用例如下:

@Test

public void givenSameNameAndAddress_whenHashCode_thenPersonsEqual() {

String name = “John Doe”;

String address = “100 Linda Ln.”;

Person person1 = new Person(name, address);

Person person2 = new Person(name, address);

assertEquals(person1.hashCode(), person2.hashCode());

}

当然也是任何的字段不一样就会返回不一样的code值,所有字段都一样返回相同的code值。但是返回相同code值不代表所有字段都一样(毕竟有碰撞概率)。

3.5、生成的toString方法


一个name为“John Doe”,address为“100 Linda Ln.”的Person,toString样例如下:

Person[name=John Doe, address=100 Linda Ln.]

4、构造方法


虽然为我们生成了一个public的构造方法,但我们仍然可以自定义其他构造方法的实现。

此定制旨在用于验证,并应尽可能简单。

比如我们要确保传入的name和address两个字段都不为空,那么我们可以这样自定义构造方法:

public record Person(String name, String address) {

public Person {

Objects.requireNonNull(name);

Objects.requireNonNull(address);

}

}

或者我们可以提供一些值包含默认值:

public record Person(String name, String address) {

public Person(String name) {

this(name, “Unknown”);

}

}

当然可以使用this.name来赋值也是一样的,但是由于所有字段默认都是final的,所以要求我们自定义的构造方法必须覆盖所有字段。

但是如果我们同时生命无参的构造,也重新覆盖定义全参数的构造,会导致编译报错,示例如下:

public record Person(String name, String address) {

public Person {

Objects.requireNonNull(name);

Objects.requireNonNull(address);

}

public Person(String name, String address) {

this.name = name;

this.address = address;

}

}

5、静态变量和静态方法


和class一样,record修饰的类也可以包含静态变量和静态方法,使用方法和在class里面是一样的。

public record Person(String name, String address) {

public static String UNKNOWN_ADDRESS = “Unknown”;

}

public record Person(String name, String address) {

public static Person unnamed(String address) {

return new Person(“Unnamed”, address);

}

}

调用方式也和class是一样的。

Person.UNKNOWN_ADDRESS

Person.unnamed(“100 Linda Ln.”);

最后

权威指南-第一本Docker书

引领完成Docker的安装、部署、管理和扩展,让其经历从测试到生产的整个开发生命周期,深入了解Docker适用于什么场景。并且这本Docker的学习权威指南介绍了其组件的基础知识,然后用Docker构建容器和服务来完成各种任务:利用Docker为新项目建立测试环境,演示如何使用持续集成的工作流集成Docker,如何构建应用程序服务和平台,如何使用Docker的API,如何扩展Docker。

总共包含了:简介、安装Docker、Docker入门、使用Docker镜像和仓库、在测试中使用Docker、使用Docker构建服务、使用Fig编配Docke、使用Docker API、获得帮助和对Docker进行改进等9个章节的知识。

image

image

image

image

关于阿里内部都在强烈推荐使用的“K8S+Docker学习指南”—《深入浅出Kubernetes:理论+实战》、《权威指南-第一本Docker书》,看完之后两个字形容,爱了爱了!

中使用Docker、使用Docker构建服务、使用Fig编配Docke、使用Docker API、获得帮助和对Docker进行改进等9个章节的知识。

[外链图片转存中…(img-ZD5b5o6K-1714321839258)]

[外链图片转存中…(img-3WNtQP4W-1714321839259)]

[外链图片转存中…(img-k1x2Osfc-1714321839259)]

[外链图片转存中…(img-F6WkF3Nf-1714321839259)]

关于阿里内部都在强烈推荐使用的“K8S+Docker学习指南”—《深入浅出Kubernetes:理论+实战》、《权威指南-第一本Docker书》,看完之后两个字形容,爱了爱了!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 14
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值