Groovy - Jenerik
Jenerikler, sınıfları, arayüzleri ve yöntemleri tanımlarken türlerin (sınıflar ve arayüzler) parametre olmasını sağlar. Yöntem bildirimlerinde kullanılan daha tanıdık biçimsel parametreler gibi, tür parametreleri, aynı kodu farklı girdilerle yeniden kullanmanız için bir yol sağlar. Aradaki fark, biçimsel parametrelere yönelik girdilerin değer olması, parametre yazmanın girdilerinin ise tür olmasıdır.
Koleksiyonlar için Genel
List sınıfı gibi koleksiyon sınıfları, uygulamada yalnızca bu türdeki koleksiyonların kabul edilmesi için genelleştirilebilir. Genelleştirilmiş ArrayList'in bir örneği aşağıda gösterilmiştir. Aşağıdaki ifadenin yaptığı şey, yalnızca string türünde olan liste öğelerini kabul etmesidir -
List<String> list = new ArrayList<String>();
Aşağıdaki kod örneğinde, aşağıdakileri yapıyoruz -
- Yalnızca Dizeleri tutacak bir Genelleştirilmiş ArrayList koleksiyonu oluşturma.
- Listeye 3 dize ekleyin.
- Listedeki her öğe için dizelerin değeri yazdırılır.
class Example {
static void main(String[] args) {
// Creating a generic List collection
List<String> list = new ArrayList<String>();
list.add("First String");
list.add("Second String");
list.add("Third String");
for(String str : list) {
println(str);
}
}
}
Yukarıdaki programın çıktısı -
First String
Second String
Third String
Genelleştirilmiş Sınıflar
Tüm sınıf da genelleştirilebilir. Bu, sınıfı herhangi bir türü kabul etme ve bu türlere göre çalışma konusunda daha esnek hale getirir. Bunu nasıl başarabileceğimize dair bir örneğe bakalım.
Aşağıdaki programda aşağıdaki adımları gerçekleştiriyoruz -
ListType adında bir sınıf oluşturuyoruz. Sınıf tanımının önüne yerleştirilen <T> anahtar kelimelerine dikkat edin. Bu, derleyiciye bu sınıfın herhangi bir türü kabul edebileceğini söyler. Bu nedenle, bu sınıfın bir nesnesini bildirdiğimizde, bildirim sırasında bir tür belirtebiliriz ve bu tür <T> yer tutucusunda değiştirilir.
Genel sınıf, sınıfta tanımlanan üye değişkeni ile çalışmak için basit alıcı ve ayarlayıcı yöntemlere sahiptir.
Ana programda, ListType sınıfının, ancak farklı türlerdeki nesneleri bildirebildiğimize dikkat edin. Birincisi Tamsayı tipindedir ve ikincisi String tipindedir.
class Example {
static void main(String[] args) {
// Creating a generic List collection
ListType<String> lststr = new ListType<>();
lststr.set("First String");
println(lststr.get());
ListType<Integer> lstint = new ListType<>();
lstint.set(1);
println(lstint.get());
}
}
public class ListType<T> {
private T localt;
public T get() {
return this.localt;
}
public void set(T plocal) {
this.localt = plocal;
}
}
Yukarıdaki programın çıktısı -
First String
1