record (Java 16+)
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Java di Coddy. Pelajaran 51 dari 87.
Saat membuat class sederhana yang membawa data, kamu sering menulis kode boilerplate yang berulang: field privat, konstruktor, getter, toString(), equals(), dan hashCode(). Java 16 memperkenalkan record untuk menghilangkan pekerjaan yang membosankan ini.
record adalah class khusus yang dirancang untuk menyimpan data yang tidak dapat diubah. Kamu mendeklarasikannya dengan kata kunci record yang diikuti daftar komponennya:
record Person(String name, int age) { }
// Satu baris itu otomatis menyediakan:
// - field private final: name dan age
// - konstruktor: Person(String name, int age)
// - method pengakses: name() dan age()
// - toString(), equals(), dan hashCode()Menggunakan record itu mudah:
Person p = new Person("Alice", 30);
System.out.println(p.name()); // Alice
System.out.println(p.age()); // 30
System.out.println(p); // Person[name=Alice, age=30]Perhatikan bahwa accessor method tidak menggunakan prefiks get: namanya sama dengan nama field. Record secara implisit bersifat final, jadi tidak dapat diperluas. Semua field juga bersifat final, sehingga record pada dasarnya immutable.
Kamu dapat menambahkan method khusus dan mengganti method yang dibuat secara otomatis jika diperlukan. Kamu juga dapat menambahkan validasi dalam konstruktor ringkas:
record Person(String name, int age) {
public Person {
if (age < 0) throw new IllegalArgumentException("Age cannot be negative");
}
}Record cocok untuk DTO, respons API, atau skenario apa pun saat kamu membutuhkan wadah data sederhana yang tidak dapat diubah tanpa menulis kode boilerplate.
Tantangan
MudahMari kita buat sistem pemesanan tiket film yang menunjukkan keunggulan Java record. Kamu akan melihat bagaimana record menghilangkan kode boilerplate, tetapi tetap memungkinkanmu menambahkan method khusus dan validasi.
Kamu akan menyusun kodemu dalam tiga file:
Movie.java: Buat record yang merepresentasikan film dengan tiga komponen:title(String),genre(String), dandurationMinutes(int). Tambahkan method khusus bernamagetFormattedDuration()yang mengembalikan durasi dalam format yang mudah dibaca:[hours]h [minutes]m(misalnya, 142 menit menjadi2h 22m). Gunakan pembagian bilangan bulat dan modulo untuk menghitung jam dan menit yang tersisa.Ticket.java: Buat record yang merepresentasikan tiket film dengan tiga komponen:movie(Movie),seatNumber(String), danprice(double). Tambahkan konstruktor ringkas yang memvalidasi harga. Jika harga kurang dari atau sama dengan nol, lemparIllegalArgumentExceptiondengan pesanPrice must be positive. Tambahkan juga method khusus bernamaprintTicket()yang mengembalikan string beberapa baris:========== TICKET ========== Movie: [movie title] Genre: [movie genre] Duration: [formatted duration from movie] Seat: [seatNumber] Price: $[price] ============================Main.java: Satukan sistem pemesananmu! Kamu akan menerima lima input: judul film (String), genre (String), durasi dalam menit (int), nomor kursi (String), dan harga tiket (double).Buat record Movie dengan tiga input pertama, lalu buat record Ticket dengan film, nomor kursi, dan harga. Cetak hasil pemanggilan
printTicket()pada tiketmu.
Kamu akan menerima lima input secara berurutan: judul film, genre, durasi (menit), nomor kursi, dan harga.
Perhatikan betapa lebih ringkasnya record dibandingkan class tradisional: kamu tidak perlu menulis konstruktor, getter, toString(), equals(), atau hashCode(). Konstruktor ringkas memungkinkanmu menambahkan validasi tanpa mengulang penetapan field, dan kamu tetap bisa menambahkan method khusus saat diperlukan!
Coba sendiri
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Baca input
String title = scanner.nextLine();
String genre = scanner.nextLine();
int durationMinutes = Integer.parseInt(scanner.nextLine());
String seatNumber = scanner.nextLine();
double price = Double.parseDouble(scanner.nextLine());
// TODO: Buat record Movie dengan title, genre, dan durationMinutes
// TODO: Buat record Ticket dengan movie, seatNumber, dan price
// TODO: Cetak tiket menggunakan method printTicket()
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalPengantar OOPClass dan ObjectKata Kunci thisMethodField (Atribut)Method KonstruktorOverloading KonstruktorRangkuman: Kalkulator Sederhana4Pewarisan
Pewarisan Dasar (extends)Kata Kunci superMethod Overriding (@Override)Rantai KonstruktorKelas ObjectPewarisan Tunggal dan BertingkatMengapa Tidak Ada Pewarisan Multi-KelasRangkuman: Hierarki Karyawan7method Khusus & class Object
method toString()equals() dan hashCode()method clone()compareTo() dan ComparableAntarmuka ComparatorUlasan: Pengurutan Kustom10Penanganan Exception dalam OOP
Hierarki class ExceptionException KustomError Checked vs UncheckedPola Try-with-ResourcesRekap: Pengguna Tervalidasi2Modifier Akses & Enkapsulasi
Ikhtisar Tingkat AksesMethod Getter dan SetterPenyembunyian InformasiKata Kunci finalUlasan: Pengelola Rekening Bank5Polimorfisme
Dasar method overloadingMethod overriding (Saat program berjalan)Upcasting dan downcastingOperator instanceofclass dan method abstrakUlasan: Kalkulator Bentuk8Konsep OOP Lanjutan
Komposisi vs PewarisanAgregasi vs Komposisiinner, nested, dan anonymous classEnum dan method Enumrecord (Java 16+)sealed class (Java 17+)11Pola Desain Bagian 1
Pengantar Pola DesainPola SingletonPola FactoryPola BuilderPola ObserverPola Strategy3property class dan Anggota Statis
Variabel Instance vs Statismethod StatisBlok StatisKonstanta (static final)Rangkuman: Penghitung dan Utilitas6Antarmuka & Kelas Abstrak
Pengantar AntarmukaMengimplementasikan AntarmukaImplementasi Beberapa AntarmukaDefault & Static pada AntarmukaKelas Abstrak vs AntarmukaAntarmuka FungsionalRekap: Sistem PembayaranLatihan sendiri: Compiler Java online