Referensi Metode Statis
Ganti lambda yang memanggil metode statis dengan referensi ClassName::methodName.
Referensi Metode Statis adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 1 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 Metode?
Referensi metode adalah lambda singkat yang mendelegasikan pekerjaan kepada metode yang sudah ada. Ketika lambda hanya memanggil satu metode, referensi metode lebih ringkas dan mudah dibaca.
import java.util.*;
import java.util.stream.*;
List<String> names = List.of("Alice", "Bob", "Carol");
// Lambda:
names.forEach(s -> System.out.println(s));
// Equivalent method reference:
names.forEach(System.out::println);Sintaks Referensi Metode Statis
Referensi metode statis memiliki bentuk ClassName::staticMethodName. Referensi ini dapat digunakan di mana pun antarmuka fungsional mengharapkan metode dengan tanda tangan yang sama.
import java.util.stream.*;
// Integer.parseInt(String) matches Function<String, Integer>
List<String> strs = List.of("1","2","3","4","5");
List<Integer> nums = strs.stream()
.map(Integer::parseInt) // replaces s -> Integer.parseInt(s)
.collect(Collectors.toList());
System.out.println(nums); // [1, 2, 3, 4, 5]Math.abs sebagai Referensi Metode
Metode statis dari kelas utilitas seperti Math dapat direferensikan secara langsung:
import java.util.*;
import java.util.stream.*;
List<Integer> values = List.of(-3, 5, -1, 8, -4);
List<Integer> abs = values.stream()
.map(Math::abs) // replaces v -> Math.abs(v)
.collect(Collectors.toList());
System.out.println(abs); // [3, 5, 1, 8, 4]Referensi Metode Statis dengan Predikat
Metode statis yang menghasilkan nilai boolean dapat digunakan sebagai Predicate:
import java.util.stream.*;
// String.isEmpty() is an instance method, but we can use a static helper
// Objects.isNull matches Predicate<Object>
List<String> mixed = Arrays.asList("hello", null, "world", null);
long nullCount = mixed.stream()
.filter(Objects::isNull)
.count();
System.out.println(nullCount); // 2
long nonNull = mixed.stream()
.filter(Objects::nonNull)
.count();
System.out.println(nonNull); // 2Referensi Statis Comparator
Metode statis yang sesuai dengan Comparator juga dapat direferensikan:
import java.util.*;
import java.util.stream.*;
List<String> words = List.of("banana", "apple", "cherry");
// String.CASE_INSENSITIVE_ORDER is a Comparator
List<String> sorted = words.stream()
.sorted(String::compareToIgnoreCase)
.collect(Collectors.toList());
System.out.println(sorted); // [apple, banana, cherry]Metode Pembantu Statis Khusus
Tentukan metode utilitas statis dan referensikan secara langsung:
class Validator {
static boolean isPositive(int n) { return n > 0; }
static String toLabel(int n) { return n > 0 ? "POS" : "NEG"; }
}
List<Integer> nums = List.of(-2, 3, -1, 5, 0);
List<Integer> positive = nums.stream()
.filter(Validator::isPositive)
.collect(Collectors.toList());
System.out.println(positive); // [3, 5]
List<String> labels = nums.stream()
.map(Validator::toLabel)
.collect(Collectors.toList());BiFunction dengan Metode Statis
Metode statis yang menerima dua parameter dapat sesuai dengan BiFunction<T,U,R>:
import java.util.function.*;
// Math.max(int,int) → BiFunction... but needs IntBinaryOperator
java.util.function.IntBinaryOperator maxOp = Math::max;
System.out.println(maxOp.applyAsInt(7, 3)); // 7
// String.format as BiFunction? Only works if signature matches:
// Integer.sum(int,int) → IntBinaryOperator
java.util.function.IntBinaryOperator sum = Integer::sum;
System.out.println(sum.applyAsInt(10, 20)); // 30Mengurutkan dengan Comparator.comparing + referensi statis
Gabungkan Comparator.comparing dengan referensi metode untuk pengurutan yang rapi:
record Person(String name, int age) {}
List<Person> people = List.of(
new Person("Charlie",30), new Person("Alice",25), new Person("Bob",35)
);
people.stream()
.sorted(Comparator.comparing(Person::name))
.forEach(p -> System.out.println(p.name()));
// Alice, Bob, CharlieKapan Menggunakan Referensi Metode Statis
Gunakan referensi metode statis ketika:
- Badan lambda hanya berupa satu pemanggilan metode statis
- Tidak diperlukan transformasi argumen
- Tanda tangan metode sesuai dengan antarmuka fungsional
Jika Anda perlu mengubah argumen atau menambahkan logika, tetap gunakan lambda.
Perbandingan Keterbacaan
Perbandingan berdampingan antara gaya lambda dan referensi metode:
// Lambda style
Stream.of("1","2","3").map(s -> Integer.parseInt(s));
Stream.of(1,-2,3).filter(n -> n > 0);
Stream.of(-5,2,-1).map(n -> Math.abs(n));
// Method reference style
Stream.of("1","2","3").map(Integer::parseInt);
Stream.of(1,-2,3).filter(Validator::isPositive);
Stream.of(-5,2,-1).map(Math::abs);Kesalahan Umum: Tanda Tangan yang Salah
Referensi metode hanya berfungsi jika tanda tangannya sama persis dengan metode abstrak pada antarmuka fungsional. Jika jenis atau jumlah argumen berbeda, gunakan pembungkus lambda.
// Math.pow(double, double) needs two args — can't use as Function<Double, Double>
// This won't compile:
// Function<Double, Double> square = Math::pow; // ERROR
// Fix with lambda:
Function<Double, Double> square = n -> Math.pow(n, 2);
System.out.println(square.apply(5.0)); // 25.0Pemeriksaan Singkat
Manakah dari pilihan berikut yang merupakan referensi metode statis valid dan dapat digunakan sebagai Predicate<Object>?
Ringkasan: Referensi Metode Statis
Poin-poin penting:
- Sintaks: ClassName::staticMethodName
- Menggantikan lambda yang mendelegasikan pekerjaan kepada satu metode statis
- Tanda tangan metode harus sesuai dengan metode abstrak pada antarmuka fungsional
- Dapat digunakan bersama Predicate, Function, Consumer, Comparator, dan lainnya
- Gunakan lambda ketika diperlukan transformasi argumen atau logika tambahan
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Referensi Metode Statis” gratis?
Ya — teks lengkap “Referensi Metode Statis” 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 Metode Statis”?
Ganti lambda yang memanggil metode statis dengan referensi ClassName::methodName. 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 1 dari 4.
Berapa lama pelajaran “Referensi Metode Statis” 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