22 Haziran 2020 Pazartesi

Kendisi Generic Olan Sınıfa Constructor Tanımlama

Giriş
Generic constructor şu şekillerde kullanılabilir.
1. Sınıfın kendisi generic'tir. Constructor yine aynı tipten parametre alır
2. Sınıf generic değildir. Constructor T tipten parametre alır
3. Sınıfın kendisi generictir. Conctructor T2 tipinden farklı bir parametre alır.

Örnek - Kendisi Generic Olan Sınıfa Constructor
Şöyle yaparız. Burada <T> sınıf tanımlanırken belirtiliyor.
public class Container<T> {
  
  private T defaultValue;

  public Container(T defaultValue){
    this.defaultValue = defaultValue;
  }
}
Örnek - Kendisi Generic Olan Sınıfa Static Builder Metod
Şöyle yaparız
public Foo <T extends Bar> {

  T bar;

  public static <T extends Bar> Foo<T> builder (T bar) {
    new Foo(bar)
  }

  private Foo (T bar) {
    this.bar = bar;
  }
}

Örnek - Kendisi Generic Olmayan Sınıfa Generic Constructor
Elimizde şöyle bir kod olsun. Burada <T> constructor'dan önce belirtiliyor.
public class TypeWithGenericConstructor {

  public <T> TypeWithGenericConstructor(T arg) {
    // TODO Auto-generated constructor stub
  }

}
Şöyle kullanabiliriz.
new TypeWithGenericConstructor(LocalDate.now(ZoneId.systemDefault()));
Eğer derleyiciye inference yapamazsa yardımcı olmak gerekir. new anahtar kelimesinden sonra type yazılır. Şöyle yaparız
new <LocalDate>TypeWithGenericConstructor(null);
Yardımcı olma işlemi Java'daki diğer sınıflar içinde yapılabilir. Şu kod da benzer işi yapar. Yine new anahtar kelimesinden sonra type yazılır.
List<Integer> list = new <String, Long>ArrayList<Integer>();
Örnek - Kendisi Generic Olan Sınıfa T2 Tipinden Constructor
Şöyle yaparız. Burada <T> sınıf tanımlanırken belirtiliyor. <V> ise constructor'dan önce belirtiliyor.
public class Container<T> {
  
  public <V> Container(V value){
    ...
  }
}

Hiç yorum yok:

Yorum Gönder