Java 8 ile birlikte gelen yeni bir özellik olan metod referansını bu yazıda ele alacağız. Java 8 mi kaldı demeyin, zira Java 8 ile gelen birçok yenilik halen kullanılmaktadır, dolayısıyla Java 8'i iyi anlamak, gelecek sürümler için iyi bir kazanımdır. Herşey tamamsa başlayalım.
Java'da 3 tip metod referans çeşidi vardır. Bunlar;
- Statik metoda referans vermek
- Nesnelerin metotlarına referans vermek
- Kurucu metotlara referans vermek
Şimdi bunları sırayla inceleyelim.
Statik Metoda Referans Vermek
1- Statik metotlara referans vermek, adı üzerinde static tipindeki metotlara referans vermektir. Örneğin elimizde fonksiyonel arayüzümüz var. Yani sadece tek metodu bulunan interface var. Bu tek metodu başka bir static metoda bağlamak için şu şekilde bir örnek yapabiliriz.
2- İstersek bir static metodu Thread'e parametre olarak vererek çalıştırılmasını sağlayabiliriz.
3- Java tarafından önceden tanımlanmış fonksiyon arayüzleri ile birlikte kullanabiliriz. Örneğine BiFunction, Java içerisinde bulunan ve 2 nesneyi alıp bir metoda gönderen ve bu metottan döndürülen sonucu bize veren bir fonksiyon arayüzüdür. Örneğimizde BiFunction ile bir örnek yaptık.
Nesnelerin Metoduna Referans Vermek
Bu kullanım şeklinin yukarıdaki kullanımlardan tek farkı, referans verilen metodun bir nesneye ait olmasıdır. Yani static olmak zorunda değildir. Thread örneğini, bir de nesne oluşturarak yapalım.
Kurucu Metoda Referans Vermek
Eğer isterseniz bir sınıfın kurucu metoduna da referans gösterebilirsiniz. Bunun için, SinifAdi::new şeklinde kullanmanız gerekir. Bir örnek vermek gerekirse;
Evet, şimdi örneklere bakıp tüm bunların gereksiz olduğunu düşünebilirsiniz, hatta belki okuyanların çoğu filmin yarısında salonu terketmiş de olabilir... Bu metot referansının ne işe yarayacağını da anlamamış,merak etmiş olabilirsiniz. Evet haklısınız, örnekler metot referansının nerede kullanılacağını göstermekten çok, nasıl kullanılabileceğini göstermek üzere hazırlanmıştır. Metot referansı, lambda ifadelerinin yerine kullanıldığı zaman anlamlı olacaktır. Yani zaten işimizi lambda ifadeleri kullanarak oldukça kısaltıyorduk, ama bu metot referanslarını kullanarak daha da kısa kodlar yazabiliriz. Mesela bir örnekle görelim.
Bildiğimiz gibi println() metodu static metottur. Bu bilgiden yararlanarak, metot referansını kullanıp şöyle birşey yazabilir miyiz?
Sanki biraz daha temiz oldu, değil mi? Pekala, bir başka örnek daha yapalım. Elimizdeki dizide bulunan çift sayıları ekrana yazalım.
Şimdi bir de metod referansı kullanarak aynı programı yazalım.
Oldukça sade! Tabi, burada filtreleme metodunda olarak referans göstermek yerine number -> number%2==0 yazarım diyebilirsiniz. Haklısınız, ama kontrol yapmanız gereken işlemin her zaman bu kadar basit olmayabileceğini de unutmayın...
Bir başka yazıda buluşmak dileğiyle...
kaynak: https://www.javatpoint.com/java-8-method-reference
Java'da 3 tip metod referans çeşidi vardır. Bunlar;
- Statik metoda referans vermek
- Nesnelerin metotlarına referans vermek
- Kurucu metotlara referans vermek
Şimdi bunları sırayla inceleyelim.
Statik Metoda Referans Vermek
1- Statik metotlara referans vermek, adı üzerinde static tipindeki metotlara referans vermektir. Örneğin elimizde fonksiyonel arayüzümüz var. Yani sadece tek metodu bulunan interface var. Bu tek metodu başka bir static metoda bağlamak için şu şekilde bir örnek yapabiliriz.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
interface Aritmetik{ | |
int toplama(int[] array); | |
} | |
public class Coderistan { | |
public static int sum(int[] array){ | |
int sonuc = 0; | |
for(int i:array){ | |
sonuc+=i; | |
} | |
return sonuc; | |
} | |
public static void main(String[] args) { | |
Aritmetik m = Coderistan::sum; // Coderistan sınıfındaki toplama metoduna referans gösterdik. | |
int r = m.toplama(new int[]{0,10,20,5,12,7}); | |
System.out.println(r); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class Coderistan { | |
public static void threadMetod(){ | |
System.out.println("Thread çalışıyor..."); | |
} | |
public static void main(String[] args) { | |
Thread t = new Thread(Coderistan::threadMetod); | |
t.start(); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.util.function.BiFunction; | |
public class Coderistan { | |
public static int topla(int sayi1,int sayi2){ | |
return sayi1+sayi2; | |
} | |
public static void main(String[] args) { | |
BiFunction<Integer, Integer, Integer> toplayici = Coderistan::topla; | |
int result = toplayici.apply(10, 20); | |
System.out.println(result); | |
} | |
} |
Bu kullanım şeklinin yukarıdaki kullanımlardan tek farkı, referans verilen metodun bir nesneye ait olmasıdır. Yani static olmak zorunda değildir. Thread örneğini, bir de nesne oluşturarak yapalım.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class Coderistan { | |
public void threadMetod(){ | |
System.out.println("Thread çalışıyor..."); | |
} | |
public static void main(String[] args) { | |
Thread t = new Thread(new Coderistan()::threadMetod); | |
t.start(); | |
} | |
} |
Eğer isterseniz bir sınıfın kurucu metoduna da referans gösterebilirsiniz. Bunun için, SinifAdi::new şeklinde kullanmanız gerekir. Bir örnek vermek gerekirse;
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
interface ToUpper{ | |
Coderistan toUpper(String kelime); | |
} | |
public class Coderistan { | |
String kelime; | |
public Coderistan(String kelime){ | |
this.kelime = kelime.toUpperCase(); | |
} | |
public static void main(String[] args) { | |
ToUpper u = Coderistan::new; | |
Coderistan nesne = u.toUpper("coderistan"); | |
System.out.println(nesne.kelime); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class Coderistan { | |
public static void main(String[] args) { | |
List<integer> liste = Arrays.asList(1,2,3,4,5,6,7,8,9,10); | |
for(int i:liste){ | |
System.out.println(i); | |
} | |
// ya da | |
liste.forEach(sayi -> System.out.println(sayi)); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.util.Arrays; | |
import java.util.List; | |
public class Coderistan { | |
public static void main(String[] args) { | |
List<integer> liste = Arrays.asList(1,2,3,4,5,6,7,8,9,10); | |
liste.forEach(System.out::println); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class Coderistan { | |
public static void main(String[] args) { | |
List<integer> liste = Arrays.asList(1,2,3,4,5,6,7,8,9,10); | |
for(int i:liste){ | |
if(i%2==0){ | |
System.out.println(i); | |
} | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.util.Arrays; | |
import java.util.List; | |
public class Coderistan { | |
public static boolean isPair(int number){ | |
return number%2==0; | |
} | |
public static void main(String[] args) { | |
List<integer> liste = Arrays.asList(1,2,3,4,5,6,7,8,9,10); | |
liste.stream().filter(Coderistan::isPair).forEach(System.out::println); | |
} | |
} |
Bir başka yazıda buluşmak dileğiyle...
kaynak: https://www.javatpoint.com/java-8-method-reference
Yorumlar
Yorum Gönder