Java - Rujukan Method

Helo semua, pemrogram Java yang aspiratif! Hari ini, kita akan membahas tentang topik yang menarik dan mungkin agak menakutkan di awal, tetapi saya janji anda akan menemukan ia sangat berguna sekali anda menguasainya. Kita akan membicarakan tentang Rujukan Method di Java. Jadi, rakamkan minuman kegemaran anda, bersantai, dan mari kitaembark untuk perjalanan yang menarik ini bersama-sama!

Java - Method References

Apa itu Rujukan Method?

Sebelum kita melompat ke detilnya, mari kita mula dengan satu soalan yang simple: Apa itu Rujukan Method? Walau bagaimanpun, bayangkan anda memiliki seorang kawan yang sangat baik dalam memasak kue kering. Daripada untuk menjelaskan keseluruhan resepi setiap kali anda mahu kue kering, anda boleh hanya katakan, "Lakukanlah yang kau lakukan dengan kue kering itu." Itu adalah esen yang mana Rujukan Method di Java adalah — cara ringkas untuk merujuk kepada method tanpa benar-benar menjalankannya.

Rujukan method diperkenalkan di Java 8 sebagai sebahagian dari fitur ekspresi lambda. Ia memberikan cara untuk merujuk kepada method atau konstruktor tanpa memanggil mereka. Ia seperti untuk menunjuk kepada method dan mengatakan, "Gunakan ini apabila anda perlu."

Jenis Rujukan Method Java

Sekarang kita telah memiliki pemahaman dasar, mari kita eksplor jenis jenis rujukan method. Ada empat jenis utama:

  1. Rujukan kepada method statik
  2. Rujukan kepada method instance bagi objek tertentu
  3. Rujukan kepada method instance bagi objek arbitari bagi jenis tertentu
  4. Rujukan kepada konstruktor

Mari kita lihat setiap satu dari ini dengan lebih detil dengan beberapa contoh kod.

1. Rujukan Method untuk Method Statik

Ini mungkin jenis yang paling mudah untuk dipahami. Ia adalah apabila kita merujuk kepada method statik di atas kelas. Ini adalah contohnya:

import java.util.Arrays;
import java.util.List;

public class StaticMethodReference {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

// Menggunakan ekspresi lambda
numbers.forEach(number -> System.out.println(number));

// Menggunakan rujukan method
numbers.forEach(System.out::println);
}
}

Dalam contoh ini, System.out::println adalah rujukan method kepada method statik println bagi objek System.out. Ia adalah setara dengan ekspresi lambda number -> System.out.println(number), tetapi lebih ringkas dan dapat dibaca.

2. Rujukan Method untuk Method Instance bagi Objek Tertentu

Jenis rujukan method ini digunakan apabila kita ingin merujuk kepada method instance bagi objek yang ada. Ini adalah contohnya:

public class InstanceMethodReference {
public void printUpperCase(String s) {
System.out.println(s.toUpperCase());
}

public static void main(String[] args) {
InstanceMethodReference imr = new InstanceMethodReference();
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");

// Menggunakan ekspresi lambda
names.forEach(name -> imr.printUpperCase(name));

// Menggunakan rujukan method
names.forEach(imr::printUpperCase);
}
}

Di sini, imr::printUpperCase adalah rujukan method kepada method printUpperCase bagi objek imr. Ia adalah setara dengan ekspresi lambda name -> imr.printUpperCase(name).

3. Rujukan Method untuk Method Instance bagi Objek Arbitari bagi Jenis Tertentu

Satu ini agak trickier, tetapi ikut saya! Jenis rujukan method ini digunakan apabila kita ingin memanggil method bagi objek mana-mana bagi jenis tertentu. Ini adalah contohnya:

import java.util.Arrays;
import java.util.List;

public class ArbitraryObjectMethodReference {
public static void main(String[] args) {
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");

// Menggunakan ekspresi lambda
names.sort((s1, s2) -> s1.compareToIgnoreCase(s2));

// Menggunakan rujukan method
names.sort(String::compareToIgnoreCase);
}
}

Dalam contoh ini, String::compareToIgnoreCase adalah rujukan method kepada method compareToIgnoreCase bagi kelas String. Ia adalah setara dengan ekspresi lambda (s1, s2) -> s1.compareToIgnoreCase(s2).

4. Rujukan Method untuk Konstruktor

Terakhir tetapi tidak ketinggalan, kita juga boleh menggunakan rujukan method untuk merujuk kepada konstruktor. Ini adalah bagaimana ia bekerja:

import java.util.function.Supplier;

class Person {
private String name;

public Person() {
this.name = "Unknown";
}

public String getName() {
return name;
}
}

public class ConstructorMethodReference {
public static void main(String[] args) {
// Menggunakan ekspresi lambda
Supplier<Person> personSupplier1 = () -> new Person();

// Menggunakan rujukan konstruktor
Supplier<Person> personSupplier2 = Person::new;

Person person1 = personSupplier1.get();
Person person2 = personSupplier2.get();

System.out.println(person1.getName());  // Output: Unknown
System.out.println(person2.getName());  // Output: Unknown
}
}

Dalam contoh ini, Person::new adalah rujukan method kepada konstruktor bagi kelas Person. Ia adalah setara dengan ekspresi lambda () -> new Person().

Mengapa Gunakan Rujukan Method?

Sekarang, anda mungkin bertanya-tanya, "Mengapa saya perlu bimbang dengan rujukan method apabila saya boleh hanya menggunakan ekspresi lambda?" Pertanyaan yang bagus! Berikut adalah beberapa alasan:

  1. Keterbacaan: Rujukan method sering membuat kod lebih dapat dibaca dan ringkas.
  2. Kegunaan Kembali: Ia membolehkan anda untuk menggunakan implementasi method yang ada kembali.
  3. Prestasi: Dalam beberapa kasus, rujukan method boleh agak lebih efisien daripada ekspresi lambda.

Penutup

Dan itu adalah untuk saat ini, rakan-rakan! Kita telah membahas dasar-dasar rujukan method di Java. Ingat, seperti untuk belajar konsep baru, mungkin perlu beberapa praktik untuk mendapat keselesaan dengan rujukan method. Tetapi sekali anda melakukannya, anda akan temukan ia dapat membuat kod anda lebih bersih dan lebih ekspresif.

Sebagai penutup, saya ingin untuk berkongsi satu cerita kecil dari pengalaman mengajar saya. Saya sekali ada pelajar yang kesusahan dengan rujukan method. Dia terus mengatakan, "Ia seperti untuk menunjuk kepada sesuatu tanpa menggunakan jari saya!" Tetapi selepas beberapa praktik, dia ada masa untuk berpendapat, "Sekarang saya faham! Ia seperti menggunakan remote TV bukannya untuk berjalan ke TV setiap kali!" Dan itu adalah tepatnya – rujukan method adalah seperti remote kecil untuk method anda.

Jadi, teruskan untuk mengkod, teruskan untuk praktik, dan yang paling penting, teruskan untuk bersenang-senang dengan Java! Ingat, setiap master pernah menjadi pemula. Selamat coding!

Credits: Image by storyset