0Pricing
Java Academy · Ders

Statik Yöntem Başvuruları

Statik yöntemleri çağıran lambda'ları ClassName::methodName başvurularıyla değiştirin.

Statik Yöntem Başvuruları, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 1. 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.

Metot Başvuruları Nedir?

Metot başvurusu, mevcut bir metoda yönlendiren kısa bir lambda yazımıdır. Bir lambda yalnızca tek bir metodu çağıracaksa metot başvurusu daha temiz ve okunabilirdir.

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);

Statik Metot Başvurusu Sözdizimi

Statik bir metot başvurusu ClassName::staticMethodName biçimindedir. Aynı imzaya sahip bir metot bekleyen her yerde işlevsel arayüzle birlikte kullanılabilir.

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]

Metot Başvurusu Olarak Math.abs

Math gibi yardımcı sınıflardaki statik metotlara doğrudan başvurulabilir:

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]

Predicate ile Statik Metot Başvurusu

Boole türünde sonuç döndüren statik metotlar Predicate olarak kullanılabilir:

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); // 2

Comparator Statik Başvurusu

Comparator ile eşleşen statik metotlara da başvurulabilir:

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]

Özel Statik Yardımcı Metot

Statik bir yardımcı metot tanımlayın ve ona doğrudan başvurun:

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());

Statik Metot ile BiFunction

İki parametre alan statik metotlar BiFunction<T,U,R> ile eşleşebilir:

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)); // 30

Comparator.comparing + Statik Başvuru ile Sıralama

Temiz bir sıralama için Comparator.comparing işlevini metot başvurularıyla birleştirin:

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, Charlie

Statik Metot Başvuruları Ne Zaman Kullanılır?

Şu durumlarda statik metot başvurularını kullanın:

  • Lambda gövdesi tek bir statik metot çağrısından oluşuyorsa
  • Bağımsız değişkenlerin dönüştürülmesi gerekmiyorsa
  • Metot imzası işlevsel arayüzle eşleşiyorsa

Bağımsız değişkenleri dönüştürmeniz veya mantık eklemeniz gerekiyorsa lambda kullanmaya devam edin.

Okunabilirlik Karşılaştırması

Lambda ve metot başvurusu stillerinin yan yana karşılaştırması:

// 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);

Yaygın Tuzak: Yanlış İmza

Bir metot başvurusu yalnızca imzası işlevsel arayüzün soyut metoduyla tam olarak eşleşiyorsa çalışır. Bağımsız değişken türleri veya sayıları farklıysa bunun yerine bir lambda sarmalayıcısı kullanın.

// 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.0

Hızlı Kontrol

Aşağıdakilerden hangisi Predicate<Object> olarak çalışan geçerli bir statik metot başvurusudur?

Özet: Statik Metot Başvuruları

Temel çıkarımlar:

  • Sözdizimi: ClassName::staticMethodName
  • Tek bir statik metoda yönlendiren lambdaların yerine geçer
  • Metot imzası, işlevsel arayüzün soyut metoduyla eşleşmelidir
  • Predicate, Function, Consumer, Comparator vb. ile çalışır
  • Bağımsız değişken dönüşümü veya ek mantık gerektiğinde lambda kullanın

Sıkça Sorulan Sorular

“Statik Yöntem Başvuruları” dersi ücretsiz mi?

Evet — “Statik 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.

“Statik Yöntem Başvuruları” dersinde ne öğreneceğim?

Statik yöntemleri çağıran lambda'ları ClassName::methodName başvurularıyla değiştirin. 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 1. dersidir.

“Statik 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

  1. Statik Yöntem Başvuruları
  2. Belirli Bir Örnekte Örnek Yöntem Başvuruları
  3. Herhangi Bir Örneğin Yöntem Başvuruları
  4. Yapıcı Başvuruları
← Java Academy Sayfasına Dön