Method reference
- Java kursu
- Orta seviye
- Ders 102/116
- 5 dk
Class::method ile metot referansını öğrenirsin.
Method reference
Method reference, zaten var olan bir metodu lambda yerine kullanmanın kısa yoludur. Sözdizimi: Class::method. s -> System.out.println(s) yerine System.out::println yazabilirsin.
Dört türü vardır: statik metod (Math::abs), belirli türün örnek metodu (String::length), belirli örnek metodu (System.out::println) ve kurucu (User::new). Method reference her zaman bir lambda yerine geçmez; yalnızca gövde tek bir metot çağrısı ise kullanılabilir.
Method reference ne zaman kullanılır?
Bir lambda gövdesi yalnızca tek bir metot çağrısı ise method reference daha okunaklıdır. names.forEach(s -> System.out.println(s)); yerine names.forEach(System.out::println); yazmak aynı anlama gelir ama daha kısadır.
Ancak gövde hesaplama, filtreleme veya dönüşüm içeriyorsa method reference yeterli olmaz. Örneğin s -> s.toLowerCase().trim() iki metot çağırdığı için lambda olarak kalmalıdır. Bu, okunabilirlik ve kısalık arasında bir denge kurar.
Uygulama forEach ile method reference
List<String> names = new ArrayList<>(); tanımla; "Ayşe", "Alex" ekle. names.forEach(System.out::println); çağrısı ile her elemanı method reference kullanarak yazdır.
Başlangıç kodu
import java.util.List;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
// List<String> tanimla, iki isim ekle, forEach ile method reference yazdir
}
}Örnek çözüm
import java.util.List;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
List<String> names = new ArrayList<>();
names.add("Ayşe");
names.add("Alex");
names.forEach(System.out::println);
}
}Beklenen çıktı
Ayşe Alex
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Method reference türlerini eşleştir
| Kavram | Anlamı |
|---|---|
Math::abs |
Statik metot |
String::length |
Türün örnek metodu |
System.out::println |
Örnek metodu |
User::new |
Kurucu |
2 Method reference'i tamamla
names.forEach(System.out::____);
names.forEach(System.out::println);
Açıklama: println metodu referansı ile her eleman yazdırılır.
3 Hangi lambda System.out::println ile aynıdır?
- s -> s.length()
- s -> System.in.read()
- s -> s.toUpperCase()
- s -> System.out.println(s) Doğru cevap
Açıklama: s -> System.out.println(s) ile System.out::println aynıdır.