Herhangi Bir Örneğin Yöntem Başvuruları
Alıcıyı belirtmeden bir örnek yöntemine başvurun; bu yöntem Stream işlemlerinde yoğun biçimde kullanılır.
Herhangi Bir Örneğin Yöntem Başvuruları, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Java Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Java Academy kursu toplamda 4 dersten oluşur.
Herhangi Bir Örnek Referansı Nedir?
Herhangi bir örnek yöntem referansı, ClassName::instanceMethod kullanır. Burada işlevsel arayüzün ilk bağımsız değişkeni alıcı görevi görür — her öğe, yöntemin çağrıldığı nesne olur.
import java.util.*;
import java.util.stream.*;
List<String> names = List.of("alice","bob","carol");
// String::toUpperCase — receiver is each list element
List<String> upper = names.stream()
.map(String::toUpperCase)
.collect(Collectors.toList());
System.out.println(upper); // [ALICE, BOB, CAROL]Alıcı Nasıl Belirlenir
Herhangi bir örnek referansında Type::method, işlevsel arayüzün ilk parametresini this (alıcı) yapar:
// String::length matches Function<String, Integer>
// Equivalent to: s -> s.length()
Function<String, Integer> len = String::length;
System.out.println(len.apply("Java")); // 4
// String::isEmpty matches Predicate<String>
// Equivalent to: s -> s.isEmpty()
Predicate<String> isEmpty = String::isEmpty;
System.out.println(isEmpty.test("")); // trueAkış İşlemleriyle Yoğun Olarak Kullanılır
Herhangi bir örnek referansları, akış işlem hatlarında en sık kullanılan türdür:
List<String> words = List.of("Hello","","World","","Java");
// filter with String::isEmpty
long empty = words.stream().filter(String::isEmpty).count();
System.out.println(empty); // 2
// map with String::toLowerCase
words.stream()
.filter(s -> !s.isEmpty())
.map(String::toLowerCase)
.forEach(System.out::println);İki Bağımsız Değişkenli Yöntemlerle BiFunction Tarzı
Bir türdeki iki bağımsız değişkenli yöntem, T'nin alıcı ve U'nun bağımsız değişken olduğu BiFunction<T, U, R> ile eşleşir:
import java.util.function.*;
// String::startsWith → BiPredicate<String, String>
// receiver=first arg, argument=second arg
BiPredicate<String, String> starts = String::startsWith;
System.out.println(starts.test("JavaStream", "Java")); // true
System.out.println(starts.test("Python", "Java")); // falseHerhangi Bir Örnekle Karşılaştırıcı
String::compareTo, Comparator<String> ile eşleşir — karşılaştırıcının iki bağımsız değişkeni alıcı ve parametre olur:
List<String> words = List.of("banana","apple","cherry");
List<String> sorted = words.stream()
.sorted(String::compareTo)
.collect(Collectors.toList());
System.out.println(sorted); // [apple, banana, cherry]Özel Sınıfta Herhangi Bir Örnek
Yalnızca JDK türlerinde değil, herhangi bir sınıfın örnek yöntemlerinde de çalışır:
record Product(String name, double price) {
boolean isExpensive() { return price > 50; }
String label() { return name + " ($" + price + ")"; }
}
List<Product> products = List.of(
new Product("Widget", 9.99),
new Product("Gadget", 99.99),
new Product("Donut", 1.50)
);
products.stream()
.filter(Product::isExpensive)
.map(Product::label)
.forEach(System.out::println); // Gadget ($99.99)Belirli Örnek ile Farkı
Temel fark:
- Belirli:
obj::method— obj her zaman alıcıdır - Herhangi bir örnek:
Type::method— her öğe IS alıcıdır
String fixed = "prefix";
// Specific instance: fixed is always the receiver
Predicate<String> startsFixed = fixed::startsWith; // always checks 'prefix'.startsWith(arg)
// Arbitrary instance: each element is the receiver
Predicate<String> isEmpty = String::isEmpty; // each element.isEmpty()Collectors İçinde Yöntem Referansları
Herhangi bir örnek referansları, toplayıcılarla doğal biçimde birleştirilebilir:
List<String> items = List.of(" hello "," world "," java ");
List<String> trimmed = items.stream()
.map(String::trim)
.collect(Collectors.toList());
System.out.println(trimmed); // [hello, world, java]Yöntem Referanslarını Zincirleme
Yöntem referansları, işlev üzerinde andThen/compose ile zincirlenebilir:
Function<String, String> pipeline =
((Function<String, String>) String::trim)
.andThen(String::toUpperCase);
System.out.println(pipeline.apply(" hello world "));
// HELLO WORLDSorun: Aşırı Yüklenmiş Yöntemler
Bir yöntem aşırı yüklendiğinde derleyici, hangi aşırı yüklemenin işlevsel arayüzle eşleştiğini çıkarmalıdır. Belirsizlik varsa bu bir derleme hatasıdır — belirsizliği gidermek için lambda kullanın:
// println is overloaded — which one?
// Consumer<String> c = System.out::println; // OK — infers println(String)
// Consumer<Object> c2 = System.out::println; // OK
// But if ambiguous:
// Function<Object,?> fn = System.out::println; // Error — println doesn't return a valuePerformans
Yöntem referansları ve lambda ifadeleri aynı bayt koduna (invokedynamic aracılığıyla) derlenir. Aralarında performans farkı yoktur — daha okunabilir olanı seçin. Niyeti açıkça ifade ettiklerinde çoğu biçim kılavuzu yöntem referanslarını tercih eder.
Hızlı Kontrol
.map() ile kullanıldığında String::toUpperCase neyi temsil eder?
Özet: Herhangi Bir Örnek Yöntem Referansları
Temel çıkarımlar:
- Söz dizimi: ClassName::instanceMethod — her öğe alıcıdır
- Alıcının ilk parametre olduğu işlevsel arayüzlerle eşleşir
- En sık .map(), .filter(), .sorted(), .forEach() içinde kullanılır
- İki bağımsız değişkenli yöntemler → öğenin alıcı olduğu BiFunction/BiPredicate ile eşleşir
- Lambda'ya kıyasla performans farkı yoktur — okunabilirliğe göre seçim yapın
Sıkça Sorulan Sorular
“Herhangi Bir Örneğin Yöntem Başvuruları” dersi ücretsiz mi?
Evet — “Herhangi Bir Örneğin Yöntem Başvuruları” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Java Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Java Academy kursu toplamda 4 dersten oluşur.
“Herhangi Bir Örneğin Yöntem Başvuruları” dersinde ne öğreneceğim?
Alıcıyı belirtmeden bir örnek yöntemine başvurun; bu yöntem Stream işlemlerinde yoğun biçimde kullanılır. Java Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Java Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Java Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“Herhangi Bir Örneğin Yöntem Başvuruları” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Java Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Java Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Statik Yöntem Başvuruları
- Belirli Bir Örnekte Örnek Yöntem Başvuruları
- Herhangi Bir Örneğin Yöntem Başvuruları
- Yapıcı Başvuruları