Referensi Konstruktor
Gunakan ClassName::new untuk membuat instans melalui interface fungsional seperti Supplier dan Function.
Referensi Konstruktor adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Java Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Java Academy mencakup 4 pelajaran total.
Apa Itu Referensi Konstruktor
Referensi konstruktor menggunakan ClassName::new untuk membuat objek melalui antarmuka fungsional. Parameter antarmuka fungsional harus sesuai dengan parameter konstruktor.
import java.util.function.*;
class Person {
String name;
Person(String name) { this.name = name; }
public String toString() { return "Person(" + name + ")"; }
}
// Function<String, Person> — calls Person(String)
Function<String, Person> factory = Person::new;
Person p = factory.apply("Alice");
System.out.println(p); // Person(Alice)Konstruktor Tanpa Argumen sebagai Pemasok
Konstruktor tanpa argumen cocok dengan Supplier<T>:
class Counter {
int count = 0;
void inc() { count++; }
}
Supplier<Counter> newCounter = Counter::new;
Counter c1 = newCounter.get();
Counter c2 = newCounter.get(); // independent instances
c1.inc();
System.out.println(c1.count); // 1
System.out.println(c2.count); // 0Konstruktor Dua Argumen sebagai BiFunction
Konstruktor dengan dua parameter cocok dengan BiFunction<T,U,R>:
record Point(int x, int y) {}
BiFunction<Integer, Integer, Point> makePoint = Point::new;
Point p = makePoint.apply(3, 4);
System.out.println(p); // Point[x=3, y=4]Referensi Konstruktor dalam Stream.map
Konversikan string menjadi objek menggunakan referensi konstruktor:
import java.util.*;
import java.util.stream.*;
List<String> names = List.of("Alice","Bob","Carol");
List<Person> people = names.stream()
.map(Person::new) // calls new Person(name) for each
.collect(Collectors.toList());
people.forEach(System.out::println);
// Person(Alice)
// Person(Bob)
// Person(Carol)Referensi Konstruktor Larik
Buat larik secara dinamis dengan Type[]::new. Ini digunakan oleh Stream.toArray():
import java.util.stream.*;
String[] arr = Stream.of("a","b","c")
.toArray(String[]::new);
for (String s : arr) System.out.print(s + " ");
// a b c
int[] sizes = {3, 5, 2};
String[][] matrix = Arrays.stream(sizes)
.mapToObj(String[]::new)
.toArray(String[][]::new);Pola Antarmuka Factory
Tentukan antarmuka fungsional kustom untuk Factory, lalu gunakan referensi konstruktor:
@FunctionalInterface
interface Factory<T> {
T create(String config);
}
class DBConnection {
String url;
DBConnection(String url) { this.url = url; }
public String toString() { return "DB(" + url + ")"; }
}
Factory<DBConnection> dbFactory = DBConnection::new;
DBConnection conn = dbFactory.create("jdbc:postgresql://localhost/mydb");
System.out.println(conn);Injeksi Dependensi dengan Referensi Konstruktor
Kerangka kerja sering menggunakan Factory fungsional untuk pembuatan instans secara tertunda. Referensi konstruktor membuat pola ini menjadi bersih:
import java.util.function.*;
class ServiceLocator {
private final Map<String, Supplier<?>> registry = new HashMap<>();
<T> void register(String name, Supplier<T> factory) {
registry.put(name, factory);
}
@SuppressWarnings("unchecked")
<T> T get(String name) { return (T) registry.get(name).get(); }
}
ServiceLocator loc = new ServiceLocator();
loc.register("counter", Counter::new);
Counter c = loc.get("counter");Memilih antara Lambda dan Referensi Konstruktor
Gunakan referensi konstruktor saat isi lambda hanya berupa new Type(args):
// Lambda:
Function<String, Person> f1 = name -> new Person(name);
// Constructor reference (preferred):
Function<String, Person> f2 = Person::new;
// When you need extra logic, stick with lambda:
Function<String, Person> f3 = name -> new Person(name.trim().toLowerCase());Tipe Generik dan Referensi Konstruktor
Kelas generik juga dapat digunakan — tipenya disimpulkan dari konteks antarmuka fungsional:
import java.util.*;
import java.util.function.*;
// ArrayList::new matches Supplier<ArrayList<String>>
Supplier<List<String>> listFactory = ArrayList::new;
List<String> l1 = listFactory.get();
List<String> l2 = listFactory.get(); // independent lists
l1.add("hello");
System.out.println(l2.size()); // 0Pengumpul Aliran menggunakan Referensi Konstruktor
Gunakan referensi konstruktor dalam pengumpul untuk membuat wadah hasil kustom:
import java.util.stream.*;
// Collect into a LinkedList using a constructor reference supplier
LinkedList<String> linked = Stream.of("a","b","c")
.collect(Collectors.toCollection(LinkedList::new));
System.out.println(linked.getFirst()); // aTipe Primitif dan Pembungkusan Otomatis
Referensi konstruktor untuk tipe pembungkus menangani pembungkusan otomatis:
// Integer::new is deprecated in Java 9+, but illustrates the concept
// Use Integer.valueOf or just autoboxing in modern Java
Function<String, Integer> intParser = Integer::parseInt; // static method ref
System.out.println(intParser.apply("42")); // 42Pemeriksaan Singkat
Antarmuka fungsional apa yang cocok dengan referensi konstruktor tanpa argumen seperti ArrayList::new?
Ringkasan: Referensi Konstruktor
Pokok-pokok penting:
- Sintaks: ClassName::new — mendelegasikan ke konstruktor yang sesuai
- Tanpa argumen → Supplier<T>; satu argumen → Function<T,R>; dua argumen → BiFunction
- Konstruktor larik: Type[]::new — digunakan dengan Stream.toArray()
- Lebih bersih daripada lambda saat isi lambda hanya berupa 'new Type(args)'
- Gunakan Collectors.toCollection(LinkedList::new) untuk hasil koleksi bertipe
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Referensi Konstruktor” gratis?
Ya — teks lengkap “Referensi Konstruktor” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Java Academy, upgrade ke CoddyKit PRO. Kursus Java Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Referensi Konstruktor”?
Gunakan ClassName::new untuk membuat instans melalui interface fungsional seperti Supplier dan Function. Kamu berlatih Java Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Java Academy?
Tidak diperlukan pengalaman sebelumnya. Java Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Referensi Konstruktor” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Java Academy ini?
Ya. Setiap pelajaran Java Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Referensi Metode Statis
- Referensi Metode Instans pada Instans Tertentu
- Referensi Metode Instans Arbitrer
- Referensi Konstruktor