در زبان جاوا، رکورد (Record) یک ساختار داده است که به شما اجازه می دهد تا یک مجموعه ای از فیلدها را در یک شیء گروه بندی کنید. اولین بار در جاوا 14 به عنوان preview feature و در جاوا 15 ارائه شد. رکوردها به صورت غیرقابل تغییر (Immutable) هستند، به این معنی که پس از ساخته شدن نمی توانید مقادیر فیلدهایشان را تغییر دهید و معمولا به عنوان DTO یا data transfer object استفاده می شوند جهت انتقال داده ها بین فرآیندها.
برای رکورد ها به صورت اتوماتیک متدهای equals،hashCode و toString ساخته می شود علاوه بر این سازنده و متد های getter مربوط به هر فیلد جنریت می شود و نیاز به نوشتن کدهای روتین که داخل کلاس می نویسیم نیست. از آن جایی که رکورد ها Immutable هستند یعنی غیرقابل تغییر بنابراین هیچ متد setter وجود نخواهد داشت.
برای تعریف یک رکورد در جاوا، شما باید از کلیدواژه record استفاده کنید و فیلدهای مورد نظرتان را تعریف کنید. به عنوان مثال، فرض کنید شما می خواهید یک رکورد برای نمایش اطلاعات یک شخص ایجاد کنید:
public record Person(String name, int age) { // constructor, getters, and other methods are generated automatically }
در این مثال، رکورد Person دو فیلد name و age را دارد. همچنین، برای این رکورد، سازنده (constructor)، متدهای getter و سایر متدهای مورد نیاز به طور خودکار تولید می شوند.
برای ایجاد یک نمونه از رکورد Person، می توانید به صورت زیر عمل کنید:
Person person = new Person("John Doe", 25);
با داشتن نمونه از رکورد Person، شما می توانید به فیلدهای آن دسترسی پیدا کنید. به عنوان مثال:
String name = person.name(); int age = person.age();
در واقع، با استفاده از رکوردها، شما می توانید به سادگی و بدون نیاز به نوشتن کدهای تکراری و مکرر، ساختار داده های ساده تری را تعریف کنید که فقط برای حفظ داده ها استفاده می شوند.
نکاتی در رابطه با رکورد ها در جاوا
رکورد یک کلاس فاینال است. در نتیجه قابل ارث بری نیست.
داده های رکورد، ایممیوتبل (غیرقابل تغییر) اند. در نتیجه برای داده های رکورد متد های ستر نداریم.
رکورد میتواند دارای چند کنستراکتور(سازنده) باشد
public record Person(String name, String email, int age) { public Person(String name,int age){ this(name,null,age); } }
برای رکورد میتوان یک کنستراکتور فشرده (compact constructor) ایجاد کرد. در واقع این نوع کنستراکتور ها هیچ ورودی نمیگیرند و هنگام ایجاد شدن صدا زده خواهند شد:
public record Person(String name,String email, int age) { public Person{ System.out.println("Compact Constructor"); } }