Rujukan Pembina
Gunakan ClassName::new untuk mencipta tika melalui antara muka berfungsi seperti Supplier dan Function.
Rujukan Pembina ialah pelajaran Java Academy percuma di CoddyKit. Ini ialah pelajaran 4 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Java Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Java Academy merangkumi sejumlah 4 pelajaran.
Apakah Rujukan Pembina?
Rujukan pembina menggunakan ClassName::new untuk mencipta objek melalui antara muka berfungsi. Parameter antara muka berfungsi sepadan dengan parameter pembina.
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)Pembina Tanpa Argumen sebagai Pembekal
Pembina tanpa argumen sepadan 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); // 0Pembina Dua Argumen sebagai BiFunction
Pembina dengan dua parameter sepadan 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]Rujukan Pembina dalam Stream.map
Tukar rentetan kepada objek menggunakan rujukan pembina:
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)Rujukan Pembina Tatasusunan
Cipta tatasusunan secara dinamik 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);Corak Antara Muka Factory
Tentukan antara muka berfungsi tersuai untuk kilang, kemudian gunakan rujukan pembina:
@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);Suntikan Kebergantungan dengan Rujukan Pembina
Rangka kerja sering menggunakan kilang berfungsi untuk penciptaan tertunda. Rujukan pembina menjadikan corak ini kemas:
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 dengan Rujukan Pembina
Gunakan rujukan pembina apabila isi lambda hanyalah 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());Jenis Generik dan Rujukan Pembina
Kelas generik juga berfungsi — jenis ditentukan daripada konteks antara muka berfungsi:
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 Strim menggunakan Rujukan Pembina
Gunakan rujukan pembina dalam pengumpul untuk membina bekas hasil tersuai:
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()); // aPrimitif dan Autopembungkusan
Rujukan pembina untuk jenis pembungkus mengendalikan autopembungkusan:
// 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")); // 42Semakan Pantas
Apakah antara muka berfungsi yang sepadan dengan rujukan pembina tanpa argumen seperti ArrayList::new?
Imbas Kembali: Rujukan Pembina
Perkara penting:
- Sintaks: ClassName::new — menyerahkan tugas kepada pembina yang sepadan
- Tanpa argumen → Pembekal<T>; satu argumen → Fungsi<T,R>; dua argumen → BiFunction
- Pembina tatasusunan: Type[]::new — digunakan dengan Stream.toArray()
- Lebih kemas daripada lambda apabila isi lambda hanyalah 'new Type(args)'
- Gunakan Collectors.toCollection(LinkedList::new) untuk hasil koleksi bertaip
Pelajari Java dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 104
- Pelajaran
- 374
Soalan Lazim
Adakah pelajaran “Rujukan Pembina” percuma?
Ya — teks penuh “Rujukan Pembina” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Java Academy, tingkat taraf kepada CoddyKit PRO. Kursus Java Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Rujukan Pembina”?
Gunakan ClassName::new untuk mencipta tika melalui antara muka berfungsi seperti Supplier dan Function. Anda berlatih Java Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Java Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Java Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 4.
Berapa lamakah pelajaran “Rujukan Pembina” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Java Academy ini?
Ya. Setiap pelajaran Java Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Rujukan Kaedah Statik
- Rujukan Kaedah Tika pada Tika Tertentu
- Rujukan Kaedah Tika Sembarangan
- Rujukan Pembina