Java Academy · Pelajaran

Rujukan Kaedah Tika pada Tika Tertentu

Tangkap objek tertentu dan rujuk salah satu kaedah tikanya untuk panggilan balik dan pendengar.

Pelajaran 2 daripada 413 langkah

Rujukan Kaedah Tika pada Tika Tertentu ialah pelajaran Java Academy percuma di CoddyKit. Ini ialah pelajaran 2 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.

Rujukan Instans Khusus

Rujukan kaedah instans pada instans khusus menangkap objek tertentu dan merujuk salah satu kaedahnya. Sintaks: instance::methodName.

// System.out is a specific PrintStream instance
List<String> names = List.of("Alice","Bob","Carol");
names.forEach(System.out::println); // System.out is the captured instance

Menangkap Instans Objek Tersuai

Mana-mana objek boleh ditangkap. Rujukan kaedah menggunakan instans tersebut pada masa ia dicipta:

class Greeter {
    private String prefix;
    Greeter(String prefix) { this.prefix = prefix; }
    String greet(String name) { return prefix + ", " + name + "!"; }
}

Greeter g = new Greeter("Hello");
java.util.function.Function<String, String> greetFn = g::greet;

System.out.println(greetFn.apply("Alice")); // Hello, Alice!
System.out.println(greetFn.apply("Bob"));   // Hello, Bob!

Menggunakan sebagai Supplier

Kaedah instans tanpa argumen yang terikat pada objek tertentu sepadan dengan Supplier<T>:

StringBuilder sb = new StringBuilder("Hello World");
java.util.function.Supplier<String> toString = sb::toString;

System.out.println(toString.get()); // Hello World
sb.append(" !");
System.out.println(toString.get()); // Hello World ! (sb is live)

Menggunakan sebagai Predikat

Kaedah instans yang mengembalikan boolean sepadan dengan Predicate apabila terikat pada instans tertentu:

String prefix = "Java";
java.util.function.Predicate<String> startsWith = prefix::equals;
// Hmm, this checks if prefix.equals(candidate).
// More useful:
Predicate<String> startsWithJ = s -> s.startsWith("J");

// But a specific instance Predicate:
StringBuilder pattern = new StringBuilder("hello");
Predicate<String> equalsHello = ((CharSequence)"hello")::equals;
System.out.println(equalsHello.test("hello")); // true
System.out.println(equalsHello.test("world")); // false

Corak Pendengar / Panggil Balik

Rujukan kaedah pada instans khusus amat sesuai untuk pendengar acara dan panggil balik — rujukan tersebut menangkap objek pengendali secara semula jadi:

class EventHandler {
    void onEvent(String event) {
        System.out.println("Handling: " + event);
    }
}

EventHandler handler = new EventHandler();
List<String> events = List.of("click","hover","submit");
events.forEach(handler::onEvent); // captures the specific handler instance

Praktikal: Pengelog Terikat pada Kelas

Ikatkan pengelog pada instans pengelog tertentu untuk digunakan sebagai pengguna:

import java.util.logging.*;

Logger log = Logger.getLogger("MyApp");

List<String> messages = List.of("Starting","Processing","Done");
messages.stream()
    .map(String::toUpperCase)
    .forEach(log::info); // log is the specific Logger instance

Rujukan Menangkap Keadaan pada Masa Pengikatan

Keadaan objek yang kelihatan melalui rujukan mencerminkan keadaan semasa objek, bukan petikan keadaan ketika rujukan dicipta:

List<String> list = new ArrayList<>(List.of("A","B"));
java.util.function.Supplier<Integer> sizeRef = list::size;

System.out.println(sizeRef.get()); // 2
list.add("C");
System.out.println(sizeRef.get()); // 3 (reflects live state)

Membandingkan Instans Tertentu dengan Instans Sebarang

Dua bentuk rujukan kaedah yang berbeza kelihatan serupa — fahami perbezaannya:

// Specific instance: s is captured at binding
String s = "hello";
Predicate<String> p1 = s::equalsIgnoreCase; // String::equalsIgnoreCase bound to 'hello'

// Arbitrary instance: receiver is the stream element
Function<String, String> p2 = String::toUpperCase; // receiver IS the element

Kes Penggunaan: Delegasi Kaedah Selamat untuk Utas

Ikatkan kaedah yang disegerakkan pada objek perkhidmatan sebagai antara muka berfungsi untuk penggunaan tak segerak yang selamat:

class Counter {
    private int count = 0;
    synchronized void increment(String ignored) { count++; }
    int get() { return count; }
}

Counter c = new Counter();
List<String> tasks = List.of("t1","t2","t3");
tasks.forEach(c::increment);
System.out.println(c.get()); // 3

Apabila Instans yang Ditangkap ialah Nol

Jika objek yang ditangkap ialah nol ketika rujukan kaedah dicipta, NullPointerException dilemparkan pada masa pemanggilan, bukan pada masa pengikatan:

StringBuilder sb = null;
// Reference is created without error:
java.util.function.Supplier<String> ref = sb::toString;
try {
    ref.get(); // NPE thrown here
} catch (NullPointerException e) {
    System.out.println("NPE at invocation");
}

Ringkasan Perbandingan

Tiga bentuk rujukan kaedah dibandingkan:

  • ClassName::staticMethod — statik, tanpa penerima
  • instance::instanceMethod — terikat pada objek tertentu
  • ClassName::instanceMethod — penerima ialah elemen strim (instans sebarang)

Semakan Pantas

Diberikan EventHandler h = new EventHandler(); list.forEach(h::handle); — apakah penerima panggilan handle bagi setiap elemen?

Imbas Kembali: Rujukan Kaedah Instans Tertentu

Perkara penting:

  • sintaks: instance::methodName — menangkap objek tertentu
  • Objek yang ditangkap ialah penerima bagi setiap pemanggilan
  • Sesuai untuk panggilan balik, pendengar dan corak pengelogan
  • Keadaan semasa instans yang ditangkap dapat dilihat melalui rujukan
  • NPE berlaku semasa pemanggilan jika instans ialah nol (bukan semasa pengikatan)
Percuma untuk bermula

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 Kaedah Tika pada Tika Tertentu” percuma?

Ya — teks penuh “Rujukan Kaedah Tika pada Tika Tertentu” 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 Kaedah Tika pada Tika Tertentu”?

Tangkap objek tertentu dan rujuk salah satu kaedah tikanya untuk panggilan balik dan pendengar. 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 2 daripada 4.

Berapa lamakah pelajaran “Rujukan Kaedah Tika pada Tika Tertentu” 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

  1. Rujukan Kaedah Statik
  2. Rujukan Kaedah Tika pada Tika Tertentu
  3. Rujukan Kaedah Tika Sembarangan
  4. Rujukan Pembina
← Kembali ke Java Academy