{"id":932,"date":"2022-09-20T05:16:36","date_gmt":"2022-09-30T18:03:55","guid":{"rendered":"https:\/\/www.silicloud.com\/blog\/uncategorized\/the-records-class-in-java-14\/"},"modified":"2024-03-18T15:17:58","modified_gmt":"2024-03-18T15:17:58","slug":"the-records-class-in-java-14","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/blog\/the-records-class-in-java-14\/","title":{"rendered":"The Records Class in Java 14"},"content":{"rendered":"<p>In this tutorial, we will explore the introduction of a new method called Records for creating classes in Java 14.<\/p>\n<ul class=\"post-ul\">\n<li>Why do we need Java Records<\/li>\n<li>How to create Records and use it<\/li>\n<li>Overriding and extending Records classes<\/li>\n<\/ul>\n<p>Java 14 Features that are Highly Recommended to Read<\/p>\n<h2>What is the purpose of Java Records?<\/h2>\n<p>Java is often criticized for its verbosity, and this is evident when creating a basic <a href=\"https:\/\/www.codecademy.com\/resources\/docs\/java\/pojo#:~:text=Published%20Aug%2018%2C%202022,is%20their%20reusability%20and%20simplicity%2e\">POJO class<\/a> as it involves writing a lot of repetitive code.<\/p>\n<ul class=\"post-ul\">\n<li>Private fields<\/li>\n<li>Getter and Setter Methods<\/li>\n<li>Constructors<\/li>\n<li>hashCode(), equals(), and toString() methods.<\/li>\n<\/ul>\n<p>The excessive use of words is a factor contributing to the strong interest in Kotlin and Project Lombok.<\/p>\n<p>The frustration of writing these generic methods every time has led to the creation of shortcuts in Java IDEs like Eclipse and IntelliJ IDEA.<\/p>\n<p>This screenshot displays the Eclipse IDE feature that allows you to automatically create the required methods for a class.<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/655ce675c40ba52feef2a8c0\/9-0.png\" alt=\"Eclipse Shortcuts Generate Ceremonial Methods\" \/><\/div>\n<p>The purpose of Java Records is to eliminate verbosity by offering a concise way to create POJO classes.<\/p>\n<h2>How to Generate Java Records<\/h2>\n<p>To create Records in your Java projects, you require two things &#8211; Java Records, a preview feature developed as part of JEP 359.<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>Make sure JDK 14 is installed. If you are using an IDE, it should also have Java 14 support. Eclipse and IntelliJ both have support for Java 14, so we are all set there.<\/ol>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<ol>To enable the preview feature, remember that it is disabled by default. In Eclipse, you can enable it by adjusting the Java Compiler settings for the project.<\/ol>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/655ce675c40ba52feef2a8c0\/14-0.png\" alt=\"Java 14 Enable Preview Feature In Eclipse\" \/><\/div>\n<p>Using the option &#8211;enable-preview -source 14 in the command line allows you to activate Java 14 preview features.<\/p>\n<p>Suppose I wish to generate an Employee model class. The code will resemble something like this.<\/p>\n<pre class=\"post-pre\"><code><span class=\"token keyword\">package<\/span> <span class=\"token namespace\">com<span class=\"token punctuation\">.<\/span>scdev<span class=\"token punctuation\">.<\/span>java14<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n<span class=\"token keyword\">import<\/span> <span class=\"token import\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>util<span class=\"token punctuation\">.<\/span><\/span><span class=\"token class-name\">Map<\/span><\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n<span class=\"token keyword\">public<\/span> <span class=\"token keyword\">class<\/span> <span class=\"token class-name\">Employee<\/span> <span class=\"token punctuation\">{<\/span>\r\n\r\n\t<span class=\"token keyword\">private<\/span> <span class=\"token keyword\">int<\/span> id<span class=\"token punctuation\">;<\/span>\r\n\t<span class=\"token keyword\">private<\/span> <span class=\"token class-name\">String<\/span> name<span class=\"token punctuation\">;<\/span>\r\n\t<span class=\"token keyword\">private<\/span> <span class=\"token keyword\">long<\/span> salary<span class=\"token punctuation\">;<\/span>\r\n\t<span class=\"token keyword\">private<\/span> <span class=\"token class-name\">Map<\/span><span class=\"token generics\"><span class=\"token punctuation\">&lt;<\/span><span class=\"token class-name\">String<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token class-name\">String<\/span><span class=\"token punctuation\">&gt;<\/span><\/span> addresses<span class=\"token punctuation\">;<\/span>\r\n\r\n\t<span class=\"token keyword\">public<\/span> <span class=\"token class-name\">Employee<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> id<span class=\"token punctuation\">,<\/span> <span class=\"token class-name\">String<\/span> name<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">long<\/span> salary<span class=\"token punctuation\">,<\/span> <span class=\"token class-name\">Map<\/span><span class=\"token generics\"><span class=\"token punctuation\">&lt;<\/span><span class=\"token class-name\">String<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token class-name\">String<\/span><span class=\"token punctuation\">&gt;<\/span><\/span> addresses<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n\t\t<span class=\"token keyword\">super<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\t\t<span class=\"token keyword\">this<\/span><span class=\"token punctuation\">.<\/span>id <span class=\"token operator\">=<\/span> id<span class=\"token punctuation\">;<\/span>\r\n\t\t<span class=\"token keyword\">this<\/span><span class=\"token punctuation\">.<\/span>name <span class=\"token operator\">=<\/span> name<span class=\"token punctuation\">;<\/span>\r\n\t\t<span class=\"token keyword\">this<\/span><span class=\"token punctuation\">.<\/span>salary <span class=\"token operator\">=<\/span> salary<span class=\"token punctuation\">;<\/span>\r\n\t\t<span class=\"token keyword\">this<\/span><span class=\"token punctuation\">.<\/span>addresses <span class=\"token operator\">=<\/span> addresses<span class=\"token punctuation\">;<\/span>\r\n\t<span class=\"token punctuation\">}<\/span>\r\n\r\n\t<span class=\"token keyword\">public<\/span> <span class=\"token keyword\">int<\/span> <span class=\"token function\">getId<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n\t\t<span class=\"token keyword\">return<\/span> id<span class=\"token punctuation\">;<\/span>\r\n\t<span class=\"token punctuation\">}<\/span>\r\n\r\n\t<span class=\"token keyword\">public<\/span> <span class=\"token class-name\">String<\/span> <span class=\"token function\">getName<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n\t\t<span class=\"token keyword\">return<\/span> name<span class=\"token punctuation\">;<\/span>\r\n\t<span class=\"token punctuation\">}<\/span>\r\n\r\n\t<span class=\"token keyword\">public<\/span> <span class=\"token keyword\">long<\/span> <span class=\"token function\">getSalary<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n\t\t<span class=\"token keyword\">return<\/span> salary<span class=\"token punctuation\">;<\/span>\r\n\t<span class=\"token punctuation\">}<\/span>\r\n\r\n\t<span class=\"token keyword\">public<\/span> <span class=\"token class-name\">Map<\/span><span class=\"token generics\"><span class=\"token punctuation\">&lt;<\/span><span class=\"token class-name\">String<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token class-name\">String<\/span><span class=\"token punctuation\">&gt;<\/span><\/span> <span class=\"token function\">getAddresses<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n\t\t<span class=\"token keyword\">return<\/span> addresses<span class=\"token punctuation\">;<\/span>\r\n\t<span class=\"token punctuation\">}<\/span>\r\n\r\n\t<span class=\"token annotation punctuation\">@Override<\/span>\r\n\t<span class=\"token keyword\">public<\/span> <span class=\"token keyword\">int<\/span> <span class=\"token function\">hashCode<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n\t\t<span class=\"token keyword\">final<\/span> <span class=\"token keyword\">int<\/span> prime <span class=\"token operator\">=<\/span> <span class=\"token number\">31<\/span><span class=\"token punctuation\">;<\/span>\r\n\t\t<span class=\"token keyword\">int<\/span> result <span class=\"token operator\">=<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">;<\/span>\r\n\t\tresult <span class=\"token operator\">=<\/span> prime <span class=\"token operator\">*<\/span> result <span class=\"token operator\">+<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">(<\/span>addresses <span class=\"token operator\">==<\/span> <span class=\"token keyword\">null<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">?<\/span> <span class=\"token number\">0<\/span> <span class=\"token operator\">:<\/span> addresses<span class=\"token punctuation\">.<\/span><span class=\"token function\">hashCode<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\t\tresult <span class=\"token operator\">=<\/span> prime <span class=\"token operator\">*<\/span> result <span class=\"token operator\">+<\/span> id<span class=\"token punctuation\">;<\/span>\r\n\t\tresult <span class=\"token operator\">=<\/span> prime <span class=\"token operator\">*<\/span> result <span class=\"token operator\">+<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">(<\/span>name <span class=\"token operator\">==<\/span> <span class=\"token keyword\">null<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">?<\/span> <span class=\"token number\">0<\/span> <span class=\"token operator\">:<\/span> name<span class=\"token punctuation\">.<\/span><span class=\"token function\">hashCode<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\t\tresult <span class=\"token operator\">=<\/span> prime <span class=\"token operator\">*<\/span> result <span class=\"token operator\">+<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">(<\/span>salary <span class=\"token operator\">^<\/span> <span class=\"token punctuation\">(<\/span>salary <span class=\"token operator\">&gt;&gt;&gt;<\/span> <span class=\"token number\">32<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\t\t<span class=\"token keyword\">return<\/span> result<span class=\"token punctuation\">;<\/span>\r\n\t<span class=\"token punctuation\">}<\/span>\r\n\r\n\t<span class=\"token annotation punctuation\">@Override<\/span>\r\n\t<span class=\"token keyword\">public<\/span> <span class=\"token keyword\">boolean<\/span> <span class=\"token function\">equals<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">Object<\/span> obj<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n\t\t<span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">this<\/span> <span class=\"token operator\">==<\/span> obj<span class=\"token punctuation\">)<\/span>\r\n\t\t\t<span class=\"token keyword\">return<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">;<\/span>\r\n\t\t<span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>obj <span class=\"token operator\">==<\/span> <span class=\"token keyword\">null<\/span><span class=\"token punctuation\">)<\/span>\r\n\t\t\t<span class=\"token keyword\">return<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span>\r\n\t\t<span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token function\">getClass<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">!=<\/span> obj<span class=\"token punctuation\">.<\/span><span class=\"token function\">getClass<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span>\r\n\t\t\t<span class=\"token keyword\">return<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span>\r\n\t\t<span class=\"token class-name\">Employee<\/span> other <span class=\"token operator\">=<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token class-name\">Employee<\/span><span class=\"token punctuation\">)<\/span> obj<span class=\"token punctuation\">;<\/span>\r\n\t\t<span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>addresses <span class=\"token operator\">==<\/span> <span class=\"token keyword\">null<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n\t\t\t<span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>other<span class=\"token punctuation\">.<\/span>addresses <span class=\"token operator\">!=<\/span> <span class=\"token keyword\">null<\/span><span class=\"token punctuation\">)<\/span>\r\n\t\t\t\t<span class=\"token keyword\">return<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span>\r\n\t\t<span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">else<\/span> <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>addresses<span class=\"token punctuation\">.<\/span><span class=\"token function\">equals<\/span><span class=\"token punctuation\">(<\/span>other<span class=\"token punctuation\">.<\/span>addresses<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span>\r\n\t\t\t<span class=\"token keyword\">return<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span>\r\n\t\t<span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>id <span class=\"token operator\">!=<\/span> other<span class=\"token punctuation\">.<\/span>id<span class=\"token punctuation\">)<\/span>\r\n\t\t\t<span class=\"token keyword\">return<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span>\r\n\t\t<span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>name <span class=\"token operator\">==<\/span> <span class=\"token keyword\">null<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n\t\t\t<span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>other<span class=\"token punctuation\">.<\/span>name <span class=\"token operator\">!=<\/span> <span class=\"token keyword\">null<\/span><span class=\"token punctuation\">)<\/span>\r\n\t\t\t\t<span class=\"token keyword\">return<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span>\r\n\t\t<span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">else<\/span> <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>name<span class=\"token punctuation\">.<\/span><span class=\"token function\">equals<\/span><span class=\"token punctuation\">(<\/span>other<span class=\"token punctuation\">.<\/span>name<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span>\r\n\t\t\t<span class=\"token keyword\">return<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span>\r\n\t\t<span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>salary <span class=\"token operator\">!=<\/span> other<span class=\"token punctuation\">.<\/span>salary<span class=\"token punctuation\">)<\/span>\r\n\t\t\t<span class=\"token keyword\">return<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span>\r\n\t\t<span class=\"token keyword\">return<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">;<\/span>\r\n\t<span class=\"token punctuation\">}<\/span>\r\n\r\n\t<span class=\"token annotation punctuation\">@Override<\/span>\r\n\t<span class=\"token keyword\">public<\/span> <span class=\"token class-name\">String<\/span> <span class=\"token function\">toString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n\t\t<span class=\"token keyword\">return<\/span> <span class=\"token string\">\"Employee [id=\"<\/span> <span class=\"token operator\">+<\/span> id <span class=\"token operator\">+<\/span> <span class=\"token string\">\", name=\"<\/span> <span class=\"token operator\">+<\/span> name <span class=\"token operator\">+<\/span> <span class=\"token string\">\", salary=\"<\/span> <span class=\"token operator\">+<\/span> salary <span class=\"token operator\">+<\/span> <span class=\"token string\">\", addresses=\"<\/span> <span class=\"token operator\">+<\/span> addresses <span class=\"token operator\">+<\/span> <span class=\"token string\">\"]\"<\/span><span class=\"token punctuation\">;<\/span>\r\n\t<span class=\"token punctuation\">}<\/span>\r\n\r\n<span class=\"token punctuation\">}<\/span>\r\n<\/code><\/pre>\n<p>Wow, that&#8217;s over 70 lines of code that was automatically generated. Now, let&#8217;s explore how to generate an Employee Record class that essentially offers the same functionalities.<\/p>\n<pre class=\"post-pre\"><code><span class=\"token keyword\">package<\/span> <span class=\"token namespace\">com<span class=\"token punctuation\">.<\/span>scdev<span class=\"token punctuation\">.<\/span>java14<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n<span class=\"token keyword\">import<\/span> <span class=\"token import\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>util<span class=\"token punctuation\">.<\/span><\/span><span class=\"token class-name\">Map<\/span><\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n<span class=\"token keyword\">public<\/span> <span class=\"token keyword\">record<\/span> <span class=\"token class-name\">EmpRecord<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> id<span class=\"token punctuation\">,<\/span> <span class=\"token class-name\">String<\/span> name<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">long<\/span> salary<span class=\"token punctuation\">,<\/span> <span class=\"token class-name\">Map<\/span><span class=\"token generics\"><span class=\"token punctuation\">&lt;<\/span><span class=\"token class-name\">String<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token class-name\">String<\/span><span class=\"token punctuation\">&gt;<\/span><\/span> addresses<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n<span class=\"token punctuation\">}<\/span>\r\n<\/code><\/pre>\n<p>Oh man, Record classes are awesome! I can&#8217;t imagine them being any shorter.<\/p>\n<p>Now, let&#8217;s employ the javap command to determine the underlying processes occurring when a Record is compiled.<\/p>\n<pre class=\"post-pre\"><code># javac <span class=\"token operator\">--<\/span>enable<span class=\"token operator\">-<\/span>preview <span class=\"token operator\">-<\/span>source <span class=\"token number\">14<\/span> <span class=\"token class-name\">EmpRecord<\/span><span class=\"token punctuation\">.<\/span>java\r\n<span class=\"token class-name\">Note<\/span><span class=\"token operator\">:<\/span> <span class=\"token class-name\">EmpRecord<\/span><span class=\"token punctuation\">.<\/span>java <span class=\"token keyword\">uses<\/span> <span class=\"token namespace\">preview<\/span> language <span class=\"token class-name\"><span class=\"token namespace\">features<span class=\"token punctuation\">.<\/span><\/span>\r\nNote<\/span><span class=\"token operator\">:<\/span> <span class=\"token class-name\">Recompile<\/span> <span class=\"token keyword\">with<\/span> <span class=\"token operator\">-<\/span><span class=\"token class-name\">Xlint<\/span><span class=\"token operator\">:<\/span>preview <span class=\"token keyword\">for<\/span> details<span class=\"token punctuation\">.<\/span>\r\n\r\n# javap <span class=\"token class-name\">EmpRecord<\/span>      \r\n<span class=\"token class-name\">Compiled<\/span> from <span class=\"token string\">\"EmpRecord.java\"<\/span>\r\n<span class=\"token keyword\">public<\/span> <span class=\"token keyword\">final<\/span> <span class=\"token keyword\">class<\/span> <span class=\"token class-name\">EmpRecord<\/span> <span class=\"token keyword\">extends<\/span> <span class=\"token class-name\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>lang<span class=\"token punctuation\">.<\/span><\/span>Record<\/span> <span class=\"token punctuation\">{<\/span>\r\n  <span class=\"token keyword\">public<\/span> <span class=\"token class-name\">EmpRecord<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token class-name\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>lang<span class=\"token punctuation\">.<\/span><\/span>String<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">long<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token class-name\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>util<span class=\"token punctuation\">.<\/span><\/span>Map<\/span><span class=\"token generics\"><span class=\"token punctuation\">&lt;<\/span><span class=\"token class-name\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>lang<span class=\"token punctuation\">.<\/span><\/span>String<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token class-name\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>lang<span class=\"token punctuation\">.<\/span><\/span>String<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n  <span class=\"token keyword\">public<\/span> <span class=\"token class-name\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>lang<span class=\"token punctuation\">.<\/span><\/span>String<\/span> <span class=\"token function\">toString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n  <span class=\"token keyword\">public<\/span> <span class=\"token keyword\">final<\/span> <span class=\"token keyword\">int<\/span> <span class=\"token function\">hashCode<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n  <span class=\"token keyword\">public<\/span> <span class=\"token keyword\">final<\/span> <span class=\"token keyword\">boolean<\/span> <span class=\"token function\">equals<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>lang<span class=\"token punctuation\">.<\/span><\/span>Object<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n  <span class=\"token keyword\">public<\/span> <span class=\"token keyword\">int<\/span> <span class=\"token function\">id<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n  <span class=\"token keyword\">public<\/span> <span class=\"token class-name\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>lang<span class=\"token punctuation\">.<\/span><\/span>String<\/span> <span class=\"token function\">name<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n  <span class=\"token keyword\">public<\/span> <span class=\"token keyword\">long<\/span> <span class=\"token function\">salary<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n  <span class=\"token keyword\">public<\/span> <span class=\"token class-name\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>util<span class=\"token punctuation\">.<\/span><\/span>Map<\/span><span class=\"token generics\"><span class=\"token punctuation\">&lt;<\/span><span class=\"token class-name\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>lang<span class=\"token punctuation\">.<\/span><\/span>String<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token class-name\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>lang<span class=\"token punctuation\">.<\/span><\/span>String<\/span><span class=\"token punctuation\">&gt;<\/span><\/span> <span class=\"token function\">addresses<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<span class=\"token punctuation\">}<\/span>\r\n# \r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/655ce675c40ba52feef2a8c0\/23-0.png\" alt=\"Java Record Class Details\" \/><\/div>\n<p>To access additional internal details, execute the javap command with the -v flag.<\/p>\n<pre class=\"post-pre\"><code><span class=\"token comment\"># javap -v EmpRecord <\/span>\r\n<\/code><\/pre>\n<h2>Key aspects regarding Record Classes<\/h2>\n<p>or<\/p>\n<p>Crucial factors about Record Classes<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>A Record class cannot be extended because it is marked as final.<\/ol>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>The Record classes implicitly inherit from the java.lang.Record class.<\/ol>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>All the fields that are defined in the record declaration will not change.<\/ol>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>The record fields are immutable at a shallow level based on their respective types. For instance, we are able to modify the addresses field by accessing it and making necessary updates.<\/ol>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>A constructor is generated automatically with all the fields that are specified in the record definition.<\/ol>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>Accessor methods for the fields are automatically provided by the Record class. These methods have the same name as the field, unlike the usual generic getter methods.<\/ol>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<ol>Furthermore, the Record class also includes implementations for hashCode(), equals(), and toString() methods.<\/ol>\n<h2>Utilizing Records in Java Application<\/h2>\n<p>We will examine a basic illustration of how our EmpRecord class is utilized.<\/p>\n<pre class=\"post-pre\"><code><span class=\"token keyword\">package<\/span> <span class=\"token namespace\">com<span class=\"token punctuation\">.<\/span>scdev<span class=\"token punctuation\">.<\/span>java14<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n<span class=\"token keyword\">public<\/span> <span class=\"token keyword\">class<\/span> <span class=\"token class-name\">RecordTest<\/span> <span class=\"token punctuation\">{<\/span>\r\n\r\n\t<span class=\"token keyword\">public<\/span> <span class=\"token keyword\">static<\/span> <span class=\"token keyword\">void<\/span> <span class=\"token function\">main<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">String<\/span><span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span> args<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n\t\t\r\n\t\t<span class=\"token class-name\">EmpRecord<\/span> empRecord1 <span class=\"token operator\">=<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">EmpRecord<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">10<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">\"Pankaj\"<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">10000<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">null<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\t\t<span class=\"token class-name\">EmpRecord<\/span> empRecord2 <span class=\"token operator\">=<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">EmpRecord<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">10<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">\"Pankaj\"<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">10000<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">null<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n\t\t<span class=\"token comment\">\/\/ toString()<\/span>\r\n\t\t<span class=\"token class-name\">System<\/span><span class=\"token punctuation\">.<\/span>out<span class=\"token punctuation\">.<\/span><span class=\"token function\">println<\/span><span class=\"token punctuation\">(<\/span>empRecord1<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\t\t\r\n\t\t<span class=\"token comment\">\/\/ accessing fields<\/span>\r\n\t\t<span class=\"token class-name\">System<\/span><span class=\"token punctuation\">.<\/span>out<span class=\"token punctuation\">.<\/span><span class=\"token function\">println<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">\"Name: \"<\/span><span class=\"token operator\">+<\/span>empRecord1<span class=\"token punctuation\">.<\/span><span class=\"token function\">name<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> \r\n\t\t<span class=\"token class-name\">System<\/span><span class=\"token punctuation\">.<\/span>out<span class=\"token punctuation\">.<\/span><span class=\"token function\">println<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">\"ID: \"<\/span><span class=\"token operator\">+<\/span>empRecord1<span class=\"token punctuation\">.<\/span><span class=\"token function\">id<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\t\t\r\n\t\t<span class=\"token comment\">\/\/ equals()<\/span>\r\n\t\t<span class=\"token class-name\">System<\/span><span class=\"token punctuation\">.<\/span>out<span class=\"token punctuation\">.<\/span><span class=\"token function\">println<\/span><span class=\"token punctuation\">(<\/span>empRecord1<span class=\"token punctuation\">.<\/span><span class=\"token function\">equals<\/span><span class=\"token punctuation\">(<\/span>empRecord2<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\t\t\r\n\t\t<span class=\"token comment\">\/\/ hashCode()<\/span>\r\n\t\t<span class=\"token class-name\">System<\/span><span class=\"token punctuation\">.<\/span>out<span class=\"token punctuation\">.<\/span><span class=\"token function\">println<\/span><span class=\"token punctuation\">(<\/span>empRecord1 <span class=\"token operator\">==<\/span> empRecord2<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\t\t\r\n\t<span class=\"token punctuation\">}<\/span>\r\n<span class=\"token punctuation\">}<\/span>\r\n<\/code><\/pre>\n<p>The result:<\/p>\n<pre class=\"post-pre\"><code><span class=\"token class-name\">EmpRecord<\/span><span class=\"token punctuation\">[<\/span>id<span class=\"token operator\">=<\/span><span class=\"token number\">10<\/span><span class=\"token punctuation\">,<\/span> name<span class=\"token operator\">=<\/span><span class=\"token class-name\">Pankaj<\/span><span class=\"token punctuation\">,<\/span> salary<span class=\"token operator\">=<\/span><span class=\"token number\">10000<\/span><span class=\"token punctuation\">,<\/span> addresses<span class=\"token operator\">=<\/span><span class=\"token keyword\">null<\/span><span class=\"token punctuation\">]<\/span>\r\n<span class=\"token class-name\">Name<\/span><span class=\"token operator\">:<\/span> <span class=\"token class-name\">Pankaj<\/span>\r\n<span class=\"token constant\">ID<\/span><span class=\"token operator\">:<\/span> <span class=\"token number\">10<\/span>\r\n<span class=\"token boolean\">true<\/span>\r\n<span class=\"token boolean\">false<\/span>\r\n<\/code><\/pre>\n<p>The Record object functions similarly to other model classes and data objects.<\/p>\n<h2>Expanding the Records Constructor<\/h2>\n<p>At times, validations or logging may be desired in our constructor. In this case, we need to ensure that employee id and salary values are not negative. The default constructor does not provide this validation. To address this, we can create a concise constructor within the record class. This constructor&#8217;s code will be positioned at the beginning of the automatically generated constructor.<\/p>\n<pre class=\"post-pre\"><code><span class=\"token keyword\">public<\/span> <span class=\"token keyword\">record<\/span> <span class=\"token class-name\">EmpRecord<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> id<span class=\"token punctuation\">,<\/span> <span class=\"token class-name\">String<\/span> name<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">long<\/span> salary<span class=\"token punctuation\">,<\/span> <span class=\"token class-name\">Map<\/span><span class=\"token generics\"><span class=\"token punctuation\">&lt;<\/span><span class=\"token class-name\">String<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token class-name\">String<\/span><span class=\"token punctuation\">&gt;<\/span><\/span> addresses<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n\t\r\n\t<span class=\"token keyword\">public<\/span> <span class=\"token class-name\">EmpRecord<\/span> <span class=\"token punctuation\">{<\/span>\r\n\t\t<span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>id <span class=\"token operator\">&lt;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span>\r\n\t\t\t<span class=\"token keyword\">throw<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">IllegalArgumentException<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">\"employee id can't be negative\"<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n\t\t<span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>salary <span class=\"token operator\">&lt;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span>\r\n\t\t\t<span class=\"token keyword\">throw<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">IllegalArgumentException<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">\"employee salary can't be negative\"<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\t<span class=\"token punctuation\">}<\/span>\r\n\r\n<span class=\"token punctuation\">}<\/span>\r\n<\/code><\/pre>\n<p>If we generate an EmpRecord using the subsequent code:<\/p>\n<pre class=\"post-pre\"><code><span class=\"token class-name\">EmpRecord<\/span> empRecord1 <span class=\"token operator\">=<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">EmpRecord<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">-<\/span><span class=\"token number\">10<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">\"Pankaj\"<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">10000<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">null<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<\/code><\/pre>\n<p>We will encounter a runtime exception like:<\/p>\n<pre class=\"post-pre\"><code><span class=\"token class-name\">Exception<\/span> in thread <span class=\"token string\">\"main\"<\/span> <span class=\"token class-name\"><span class=\"token namespace\">java<span class=\"token punctuation\">.<\/span>lang<span class=\"token punctuation\">.<\/span><\/span>IllegalArgumentException<\/span><span class=\"token operator\">:<\/span> employee id can't be negative\r\n\tat <span class=\"token class-name\"><span class=\"token namespace\">com<span class=\"token punctuation\">.<\/span>scdev<span class=\"token punctuation\">.<\/span>java14<span class=\"token punctuation\">.<\/span><\/span>EmpRecord<\/span><span class=\"token punctuation\">.<\/span><span class=\"token generics\"><span class=\"token punctuation\">&lt;<\/span>init<span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">EmpRecord<\/span><span class=\"token punctuation\">.<\/span>java<span class=\"token operator\">:<\/span><span class=\"token number\">9<\/span><span class=\"token punctuation\">)<\/span>\r\n<\/code><\/pre>\n<h2>Do classes that store information have the ability to perform actions?<\/h2>\n<p>Certainly, it is possible to generate a method within records.<\/p>\n<pre class=\"post-pre\"><code><span class=\"token keyword\">public<\/span> <span class=\"token keyword\">record<\/span> <span class=\"token class-name\">EmpRecord<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> id<span class=\"token punctuation\">,<\/span> <span class=\"token class-name\">String<\/span> name<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">long<\/span> salary<span class=\"token punctuation\">,<\/span> <span class=\"token class-name\">Map<\/span><span class=\"token generics\"><span class=\"token punctuation\">&lt;<\/span><span class=\"token class-name\">String<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token class-name\">String<\/span><span class=\"token punctuation\">&gt;<\/span><\/span> addresses<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n\r\n\t<span class=\"token keyword\">public<\/span> <span class=\"token keyword\">int<\/span> <span class=\"token function\">getAddressCount<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n\t\t<span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">this<\/span><span class=\"token punctuation\">.<\/span>addresses <span class=\"token operator\">!=<\/span> <span class=\"token keyword\">null<\/span><span class=\"token punctuation\">)<\/span>\r\n\t\t\t<span class=\"token keyword\">return<\/span> <span class=\"token keyword\">this<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">addresses<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">size<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\t\t<span class=\"token keyword\">else<\/span>\r\n\t\t\t<span class=\"token keyword\">return<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span>\r\n\t<span class=\"token punctuation\">}<\/span>\r\n<span class=\"token punctuation\">}<\/span>\r\n<\/code><\/pre>\n<p>However, records are designed for carrying data, so it is best to refrain from including utility methods in a record class. Instead, it is more appropriate to create such methods in a separate utility class.<\/p>\n<p>If you believe that a Record class requires a method, it is crucial for you to carefully consider whether you truly need a Record class.<\/p>\n<h2>In conclusion<\/h2>\n<p>Java Records are a valuable addition to the fundamental programming features. They can be understood as a &#8220;named tuple&#8221; and enable the creation of concise data carrier objects without the need for excessive code repetition.<\/p>\n<p>&nbsp;<\/p>\n<p>More tutorials<\/p>\n<p><a class=\"LinkSuggestion__Link-sc-1gewdgc-4 cLBplk\" href=\"https:\/\/www.silicloud.com\/blog\/how-can-a-pandas-dataframe-be-acquired-from-an-api-endpoint-that-lacks-order\/\" target=\"_blank\" rel=\"noopener\">get pandas DataFrame from an API endpoint that lacks order?<span class=\"sc-gswNZR eASTkv\">(Opens in a new browser tab)<\/span><\/a><\/p>\n<p><a class=\"LinkSuggestion__Link-sc-1gewdgc-4 cLBplk\" href=\"https:\/\/www.silicloud.com\/blog\/an-instructional-tutorial-on-the-jackson-json-java-parser-api\/\" target=\"_blank\" rel=\"noopener\">An instructional tutorial on the Jackson JSON Java Parser API.<span class=\"sc-gswNZR eASTkv\">(Opens in a new browser tab)<\/span><\/a><\/p>\n<p><a class=\"LinkSuggestion__Link-sc-1gewdgc-4 cLBplk\" href=\"https:\/\/www.silicloud.com\/blog\/java-tutorial-for-beginners\/\" target=\"_blank\" rel=\"noopener\">Java Tutorial for beginners<span class=\"sc-gswNZR eASTkv\">(Opens in a new browser tab)<\/span><\/a><\/p>\n<p><a class=\"LinkSuggestion__Link-sc-1gewdgc-4 cLBplk\" href=\"https:\/\/www.silicloud.com\/blog\/the-objectoutputstream-in-java\/\" target=\"_blank\" rel=\"noopener\">the ObjectOutputStream in Java<span class=\"sc-gswNZR eASTkv\">(Opens in a new browser tab)<\/span><\/a><\/p>\n<p><a class=\"LinkSuggestion__Link-sc-1gewdgc-4 cLBplk\" href=\"https:\/\/www.silicloud.com\/blog\/comprehending-javas-data-types\/\" target=\"_blank\" rel=\"noopener\">Comprehending Java&#8217;s Data Types<span class=\"sc-gswNZR eASTkv\">(Opens in a new browser tab)<\/span><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this tutorial, we will explore the introduction of a new method called Records for creating classes in Java 14. Why do we need Java Records How to create Records and use it Overriding and extending Records classes Java 14 Features that are Highly Recommended to Read What is the purpose of Java Records? Java [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","footnotes":""},"categories":[1],"tags":[],"class_list":["post-932","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>The Records Class in Java 14 - Blog - Silicon Cloud<\/title>\n<meta name=\"description\" content=\"In this tutorial, we will explore the introduction of a new method called Records for creating classes in Java 14.Why do we need Java Records\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/blog\/the-records-class-in-java-14\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"The Records Class in Java 14\" \/>\n<meta property=\"og:description\" content=\"In this tutorial, we will explore the introduction of a new method called Records for creating classes in Java 14.Why do we need Java Records\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/blog\/the-records-class-in-java-14\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/SiliCloudGlobal\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-09-30T18:03:55+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-18T15:17:58+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/655ce675c40ba52feef2a8c0\/9-0.png\" \/>\n<meta name=\"author\" content=\"Emily Johnson\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@SiliCloudGlobal\" \/>\n<meta name=\"twitter:site\" content=\"@SiliCloudGlobal\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Emily Johnson\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/the-records-class-in-java-14\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/the-records-class-in-java-14\/\"},\"author\":{\"name\":\"Emily Johnson\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/3b041b19cffc258705478ecfab895378\"},\"headline\":\"The Records Class in Java 14\",\"datePublished\":\"2022-09-30T18:03:55+00:00\",\"dateModified\":\"2024-03-18T15:17:58+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/the-records-class-in-java-14\/\"},\"wordCount\":804,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\"},\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/the-records-class-in-java-14\/\",\"url\":\"https:\/\/www.silicloud.com\/blog\/the-records-class-in-java-14\/\",\"name\":\"The Records Class in Java 14 - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#website\"},\"datePublished\":\"2022-09-30T18:03:55+00:00\",\"dateModified\":\"2024-03-18T15:17:58+00:00\",\"description\":\"In this tutorial, we will explore the introduction of a new method called Records for creating classes in Java 14.Why do we need Java Records\",\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/the-records-class-in-java-14\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/blog\/the-records-class-in-java-14\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/the-records-class-in-java-14\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.silicloud.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"The Records Class in Java 14\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/blog\/\",\"name\":\"Silicon Cloud Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\"},\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\",\"name\":\"Silicon Cloud Blog\",\"url\":\"https:\/\/www.silicloud.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png\",\"contentUrl\":\"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png\",\"width\":1024,\"height\":1024,\"caption\":\"Silicon Cloud Blog\"},\"image\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/SiliCloudGlobal\/\",\"https:\/\/twitter.com\/SiliCloudGlobal\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/3b041b19cffc258705478ecfab895378\",\"name\":\"Emily Johnson\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/a5cb4e73d02ab1d79f2dfe919389ff7c1de072baa97686392031c03d858cc358?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/a5cb4e73d02ab1d79f2dfe919389ff7c1de072baa97686392031c03d858cc358?s=96&d=mm&r=g\",\"caption\":\"Emily Johnson\"},\"url\":\"https:\/\/www.silicloud.com\/blog\/author\/emilyjohnson\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"The Records Class in Java 14 - Blog - Silicon Cloud","description":"In this tutorial, we will explore the introduction of a new method called Records for creating classes in Java 14.Why do we need Java Records","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/blog\/the-records-class-in-java-14\/","og_locale":"en_US","og_type":"article","og_title":"The Records Class in Java 14","og_description":"In this tutorial, we will explore the introduction of a new method called Records for creating classes in Java 14.Why do we need Java Records","og_url":"https:\/\/www.silicloud.com\/blog\/the-records-class-in-java-14\/","og_site_name":"Blog - Silicon Cloud","article_publisher":"https:\/\/www.facebook.com\/SiliCloudGlobal\/","article_published_time":"2022-09-30T18:03:55+00:00","article_modified_time":"2024-03-18T15:17:58+00:00","og_image":[{"url":"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/655ce675c40ba52feef2a8c0\/9-0.png"}],"author":"Emily Johnson","twitter_card":"summary_large_image","twitter_creator":"@SiliCloudGlobal","twitter_site":"@SiliCloudGlobal","twitter_misc":{"Written by":"Emily Johnson","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.silicloud.com\/blog\/the-records-class-in-java-14\/#article","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/the-records-class-in-java-14\/"},"author":{"name":"Emily Johnson","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/3b041b19cffc258705478ecfab895378"},"headline":"The Records Class in Java 14","datePublished":"2022-09-30T18:03:55+00:00","dateModified":"2024-03-18T15:17:58+00:00","mainEntityOfPage":{"@id":"https:\/\/www.silicloud.com\/blog\/the-records-class-in-java-14\/"},"wordCount":804,"commentCount":0,"publisher":{"@id":"https:\/\/www.silicloud.com\/blog\/#organization"},"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/blog\/the-records-class-in-java-14\/","url":"https:\/\/www.silicloud.com\/blog\/the-records-class-in-java-14\/","name":"The Records Class in Java 14 - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/#website"},"datePublished":"2022-09-30T18:03:55+00:00","dateModified":"2024-03-18T15:17:58+00:00","description":"In this tutorial, we will explore the introduction of a new method called Records for creating classes in Java 14.Why do we need Java Records","breadcrumb":{"@id":"https:\/\/www.silicloud.com\/blog\/the-records-class-in-java-14\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/blog\/the-records-class-in-java-14\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/blog\/the-records-class-in-java-14\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.silicloud.com\/blog\/"},{"@type":"ListItem","position":2,"name":"The Records Class in Java 14"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/blog\/#website","url":"https:\/\/www.silicloud.com\/blog\/","name":"Silicon Cloud Blog","description":"","publisher":{"@id":"https:\/\/www.silicloud.com\/blog\/#organization"},"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.silicloud.com\/blog\/#organization","name":"Silicon Cloud Blog","url":"https:\/\/www.silicloud.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png","contentUrl":"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png","width":1024,"height":1024,"caption":"Silicon Cloud Blog"},"image":{"@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/SiliCloudGlobal\/","https:\/\/twitter.com\/SiliCloudGlobal"]},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/3b041b19cffc258705478ecfab895378","name":"Emily Johnson","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/a5cb4e73d02ab1d79f2dfe919389ff7c1de072baa97686392031c03d858cc358?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a5cb4e73d02ab1d79f2dfe919389ff7c1de072baa97686392031c03d858cc358?s=96&d=mm&r=g","caption":"Emily Johnson"},"url":"https:\/\/www.silicloud.com\/blog\/author\/emilyjohnson\/"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/932","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/comments?post=932"}],"version-history":[{"count":0,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/932\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/media?parent=932"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/categories?post=932"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/tags?post=932"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}