java如何查看调用记录_查看Java记录

java如何查看调用记录

JEP 359 (可在JDK 14中用作预览功能)将记录引入Java。 记录是对普通数据聚合建模的简单方法。

一个简单的范围记录如下所示:

 record Range( int from, int to) {} 

记录定义实际上与具有以下内容的最终类相同:

  • 不变的领域
  • 公共访问者
  • 构造函数
  • equals(),hashCode()和toString()的实现

因此,我们可以像这样使用记录:

 Range range = new Range( 1 , 5 );  int from = range.from(); // 1  int to = range.to(); // 5  String toString = range.toString(); // Range[from=1, to=5]  boolean equals = range.equals( new Range( 1 , 5 )); // true 

请注意,访问器的名称是from()和to(),而不是getFrom()和getTo()。

构造函数呢?

假设我们要向Record中添加一个构造函数以执行一些验证:

 record Range( int from, int to) { public Range( int from, int to) { if (from > to) { throw new IllegalArgumentException(); } this .from = from; this .to = to; }  } 

这样可以避免创建无效的Range实例。 但是,我们不得不多次写下from和to字段来执行简单的验证,这有点令人讨厌。

为了避免这种情况,我们可以使用一种特殊形式的记录构造函数,称为紧凑构造函数。 这使我们可以跳过定义构造函数参数并将构造函数参数分配给字段的操作。 看起来像这样:

 record Range( int from, int to) { public Range { if (from > to) { throw new IllegalArgumentException(); } }  } 

结果的工作原理与先前的构造函数完全相同。

定制方法

我们还可以添加新方法并覆盖记录中的现有方法。

例如:

 record Range( int from, int to) { public int getDistance() { return to - from; } @Override public String toString() { return String.format( "Range[from: %s, to: %s, distance: %s]" , from, to, getDistance()); }  } 

为什么记录有用?

如果我们需要一个简单的类来传递数据,记录只会减少我们必须编写的代码量。 用例示例是方法,复合映射键或数据传输对象的多个返回值。

假设要在集合中找到最小值和最大值。 使用记录,您可以只用一行创建两个值的返回类型:

 record MinMax( int min, int max) {}  static MinMax minMax(Collection<Integer> numbers) { ... } 

(是的,您可以使用单独的方法来找到最小值和最大值。但是,然后您必须对集合进行两次迭代)

记录还提供了一种创建复合Map键的简便方法:

 record NameAndDayOfBirth(String name, LocalDate dob) {}  private Map<NameAndDayOfBirth, Person> entries = ...; 

摘要

记录提供了一种不太冗长的方式来创建简单的数据持有人。 常见的用例是多个返回值,复合映射键或数据传输对象。 有关记录的更多背景信息,我推荐Brian Goetz撰写的这篇文章 。

您可以在GitHub上找到示例代码。

翻译自: https://www.javacodegeeks.com/2020/05/looking-at-java-records.html

java如何查看调用记录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/331322.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

递归 反转字符串_使用递归反转字符串

递归 反转字符串1.简介 在本文中&#xff0c;您将学习如何使用递归方法来反转字符串。 第一个程序是反转字符串&#xff0c;第二个程序将读取用户的输入。 在之前的文章中&#xff0c;我已经展示了如何不使用任何内置函数来反转字符串&#xff0c;以及如何反转字符串中的单词 …

jvm(4)-虚拟机性能监控与故障处理工具

【0】README0.1&#xff09;本文文字描述转自 “深入理解jvm”&#xff0c;旨在了解 虚拟机性能监控与故障处理工具的基础知识&#xff08;仅仅在于了解&#xff09;&#xff1b; 【1】概述1&#xff09;给一个系统定位问题的时候&#xff0c;知识&#xff0c;经验是关键基础&a…

代码大全和新月神话_神话般的代码

代码大全和新月神话考虑以下代码段&#xff1a; int max 10; int a 0; while (true) {// do a thing that may result in an early return if (a > max) {break;} }throw new RuntimeException("It ran out of attempts");上面有一些WTF。 循环有点不可思议&am…

Spring 思维导图,让 Spring 不再难懂(cache篇)

转载自&#xff1a; java思维导图 开源中国关于缓存缓存是实际工作中非常常用的一种提高性能的方法。而在java中&#xff0c;所谓缓存&#xff0c;就是将程序或系统经常要调用的对象存在内存中&#xff0c;再次调用时可以快速从内存中获取对象&#xff0c;不必再去创建新的重…

动手学习_动手选择值

动手学习由于冠状病毒的存在&#xff0c;可选的东西在空中&#xff0c;一切都变得可选&#xff0c;例如可选的公共聚会&#xff0c;可选的在家工作&#xff0c;可选的旅行等。 我现在是时候谈论处理NULL引用的软件工程中真正的“ 可选 ”了。 托尼霍尔&#xff08;Tony Hoare…

JVM菜鸟进阶高手之路

本文转载自公众号 匠心零度问题现象 代码如下&#xff0c;使用 ParNew Serial Old 回收器组合与使用 ParNew CMS 回收器组合时&#xff0c;结果为什么差异如此之大 &#xff1f;private static final int _1MB 1024 * 1024;public static void main(String[] args) throws …

事务的状态(状态模式)

【0】README0.1&#xff09;本文部分文字描述转自 “head first设计模式”&#xff0c;旨在学习 事务的状态&#xff08;状态模式&#xff09; 的基础知识&#xff1b;【1】应用场景一1.1&#xff09;还记得成都市各大高校内的米源自动售卖机吗&#xff1f;售卖机的主要制造商…

ogm neo4j_Neo4J OGM与Quarkus

ogm neo4j在下面的视频中&#xff0c;我演示了一个使用Neo4J数据库和Neo4J OGM的Quarkus应用程序示例。 看一下GitHub上的示例项目 。 我为咖啡豆创建了一个示例域&#xff0c;其中包含我们可以查询和匹配的某些风味配置文件。 红色节点是来自某个国家/地区的咖啡豆&#xff…

什么是ThreadLocal

本文转载自 占小狼的博客前言在面试环节中&#xff0c;考察"ThreadLocal"也是面试官的家常便饭&#xff0c;所以对它理解透彻&#xff0c;是非常有必要的. 有些面试官会开门见山的提问&#xff1a; “知道ThreadLocal吗&#xff1f;”“讲讲你对ThreadLocal的理解”…

Java bytecode instruction listings

【0】README 0.1&#xff09;these contents are shiped from https://en.wikipedia.org/wiki/Java_bytecode_instruction_listings Mnemonic Opcode (in hexadecimal) Opcode (in binary) Other bytes Stack [before]→[after] Description(no name)cb-fd these values ar…

为wmi执行例外_称之为例外?

为wmi执行例外虽然这是一个有关测试和Wiremock的Java示例&#xff0c;但它涉及一个更普遍的问题。 我们正在尝试重试Wiremock的verify方法&#xff0c;该方法可能会在我们要检查的端点被命中之前由测试调用。 在这种情况下&#xff0c;我们希望在几秒钟后循环尝试一次&#xf…

漫画:什么是MapReduce

转载自 脑洞有点大的 程序员小灰什么是MapReduce&#xff1f;MapReduce是一种编程模型&#xff0c;其理论来自Google公司发表的三篇论文&#xff08;MapReduce&#xff0c;BigTable&#xff0c;GFS&#xff09;之一&#xff0c;主要应用于海量数据的并行计算。MapReduce可以分…

orelse_可选的orElse vs orElseGet

orelseJava 8引入了一个很棒的Optional概念&#xff0c;我们在博客Java 8 Optional中进行了研究 。 因此&#xff0c;为了简要说明一下&#xff0c;Optional用于表示Optional对象或空值&#xff0c;而不是null引用。 这将有助于避免在我们尝试对空引用对象执行某些操作时发生空…

jvm(6)-java类文件结构(字节码文件)

【0】README0.1&#xff09;本文部分文字描述转自 “深入理解jvm”&#xff0c;旨在学习类文件结构 的基础知识&#xff1b;0.2&#xff09;本文荔枝以及荔枝的分析均为原创&#xff1b;0.3&#xff09;下面的截图中有附注t*编号&#xff0c;不关乎博文内容&#xff1b;0.4&am…

你可能不知道的 10 条 SQL 技巧

转载自 58沈剑 开源中国 一、一些常见的SQL实践 &#xff08;1&#xff09;负向条件查询不能使用索引 select * from order where status!0 and stauts!1 not in/not exists都不是好习惯 可以优化为in查询&#xff1a; select * from order where status in(2,3) &#x…

夜神模拟器模拟安卓测试_使用模拟进行测试

夜神模拟器模拟安卓测试如果使用正确的方法&#xff0c;模拟对象将非常有用。 我在需要驱动软件开发使用的帖子中分享了一些使用Mock Objects的经验。 在这篇文章中&#xff0c;我分享了两件事 –使用模拟进行基于合同的测试。 –用于组织模拟代码的模式。 基于合同的测试 …

java记录类型_Java中的记录类型

java记录类型于2020年3月发布的JDK 14引入了记录 &#xff08;预览语言功能&#xff09;&#xff0c;该记录提供了一种紧凑的语法来声明主要用于保存数据的类。 在记录中 &#xff0c;所有低级&#xff0c;重复且容易出错的代码都类似于构造函数&#xff0c;访问器和通用方法&a…

代理模式(多线程实现状态监控)

【-1】README-1.1&#xff09;本文部分文字描述转自“head first 设计模式”&#xff0c;旨在学习 远程代理对象 的基础知识&#xff1b;-1.2&#xff09;多线程实现糖果自动售卖机监控程序为原创&#xff1b;-1.3&#xff09;博文最后&#xff0c;转载了代理模式的定义&#…

一篇文章搞定面试中的二叉树

转载自 IOExceptioner 算法与数据结构 在上一篇介绍二叉树&#xff08; Android面试题算法之二叉树 、红黑树详细分析&#xff0c;看了都说好&#xff09;&#xff0c;没看的读者建议先去了解了解&#xff0c;接下来再给大家带来一篇关于二叉树的文章。 最近总结了一些数据结…

清洁代码_清洁单元测试

清洁代码编写使用JUnit和某些模拟库的“单元测试”测试很容易。 即使测试甚至不是单元测试并提供可疑的价值&#xff0c;它们也可能产生使某些涉众满意的代码覆盖范围。 编写单元测试&#xff08;在理论上是单元测试&#xff0c;但是比基础代码更复杂&#xff09;因此也很容易编…