Java Generics: Tanım ve Yöntemler

Java Generics: Tanım ve Yöntemler
Java Generics: Tanım ve Yöntemler

Java Generics: Tanım ve Yöntemler

Java dilinin çok görünümü olduğundankuşkusuz, işlevselliğe pozitif anlar getiren birçok değişiklik. Böyle anlamlı bir değişiklik, Java Jenerik veya genelleme girişidir. Bu işlevsellik, dili sadece daha esnek ve çok yönlü değil aynı zamanda veri tiplerini azaltma açısından da daha güvenli hale getirmiştir.

java jenerik açıklaması

Gerçek şu ki jenerik jenerik girişinden önceJava'daki kod sadece Nesne tipine referansla oluşturulabilir. Bu tür bağlantılar herhangi bir nesneye atanabilir. Sonuçta, Java'daki tüm sınıflar Object sınıfının örtülü torunlarıdır. Ancak, bu yaklaşım, bir nesneyi Object'ten hedef türüne açıkça dönüştürdüğünüzde, birçok türde güvenlik hatasının olası bir kaynağıdır. Genellemeler kullanıldığında, tüm dökümler örtük ve otomatik olarak gerçekleştirilir, bu da hataların meydana gelme olasılığını bile ortadan kaldırır.

Java Generics: açıklama ve örnek

Genelleştirmeyi aşağıdaki şekilde normal derse uygulamak için basit bir örnek alalım. Ve ancak o zaman Java Generic'in tüm inceliklerini ve nüanslarını detaylı bir incelemeye devam edeceğiz.

genel sınıf java

Fark nasılÇift sınıf duyuru. Sınıf isminin hemen ardından, T harfinin gösterildiği açılı ayraçlar açılır, bu sınıfın bir örneğini oluştururken belirli bir türle değiştirilecek bir yer tutucu türüdür. Şuna benziyor: Çifti <Tam Sayı> obj = yeni Çifti <Tam Sayı> (). T yerine, herhangi bir harf belirtebilirsiniz, ancak, kural olarak, T, V veya E kullanın.

Not: Java'nın sekizinci sürümünden başlayarak, bağlantı bildirildiğinde hedef türün belirtilmesiyle, açılı ayraçları kurucuya boş bırakabilirsiniz. Yukarıdaki örnek şu şekilde yeniden yazılabilir: Pair <Integer> obj = new Pair <> ().

Bir sınıf bu şekilde ilan edildiğinde, o zamanBu harfi, belirli alan türleri, referanslar ve yöntemlerle döndürülen yöntemler yerine kullanabilirsiniz. Bir sınıf nesnesi oluşturulurken T belirli bir türle değiştirildiği için, bu durumda birinci ve ikinci alanlar Tamsayı türünde olacaktır.

Mantığı takiben argümanları ilkEtem ve secondItem,karşılık gelen kurucuya geçirilir, ayrıca Tamsayı veya alt sınıfı tipinde olmalıdır. Nesneyi oluştururken belirtilenden farklı bir veri türünü iletmeye çalışırsanız, derleyici bu hatayı atlamaz. Yani, nesne oluştururken argümanlar ile yapıcı aşağıdaki formata sahip olacaktır: Pair <Integer> obj = new Pair <> (new Integer (1), new Integer (2)). Aynı setFirst ve setSecond yöntemleri için argümanlar için de geçerlidir. Muhtemelen tahmin ettiğiniz gibi, getFirst ve getSecond yöntemleri, Tamsayı türünde değerler döndürecektir.

Birkaç tür parametreli genel bir sınıf

Genel sınıflarda, köşeli parantez içinde belirtilen, virgülle ayrılan birkaç tür parametresini de bildirebilirsiniz. Bu dava için Pair sınıfı aşağıdaki şekilde sunulmuştur.

java jenerik

Gördüğünüz gibi, böyle bir sınıfın örneğini oluştururkenKöşeli parantez içinde, parametrelerle aynı sayıda türü belirtmeniz gerekir. Harita gibi bir tür veri yapısına aşina iseniz, o zaman aynı prensibin orada kullanıldığını fark edebilirsiniz. Orada ilk argüman anahtarın türünü belirler ve ikincisi - değerin türü. Nesne oluşturmaya aktarılan argüman türlerinin aynı olabileceği unutulmamalıdır. Yani, Pair sınıfının bir örneğinin aşağıdaki bildirimi kesinlikle doğru: Pair <String, String> obj.

Bazı genelleme özellikleri

Daha fazla ilerlemeden önce, not edilmelidir kiJava derleyici, Pair sınıfının farklı sürümlerini oluşturmaz. Aslında, derleme işlemi sırasında, jenerik türle ilgili tüm bilgiler silinir. Bunun yerine, karşılık gelen türler, Pair sınıfının özel bir sürümünü oluşturarak yayınlanır. Ancak, programın kendisi hala bu sınıfın tek bir genelleştirilmiş bir versiyonuna sahiptir. Bu işlem Java Jenerik tip temizliğinde denir.

Önemli bir noktaya dikkat edelim. Aynı java genel sınıfının farklı sürümlerine yapılan başvurular aynı nesneyi gösteremez. Yani, iki bağlantımız var: Diyelim <Tamsayı> obj1 ve Pair <Double> obj2. Bu nedenle, obj1 = obj2 satırında bir hata oluşur. Her iki değişken de Pair <T> türünde olmasına rağmen, başvurulan nesneler farklıdır. Bu, Java Genelindeki türlerin güvenliğini gösteren canlı bir örnektir.

Genelleştirilmiş sınıflara getirilen kısıtlamalar

Genellemelerin uygulanabileceğini bilmek önemlidirsadece referans türleri için, yani, parametre jenerik sınıf java argümanına iletilen argüman bir sınıf tipi olmalıdır. Örneğin, çift veya uzun gibi basit tipler iletilemez. Başka bir deyişle, aşağıdaki Pair sınıfı bildirimi satırı geçerli değil: Pair <int> obj. Ancak, bu sınırlama ciddi bir problem değildir, çünkü Java her ilkel tür için karşılık gelen bir sarmalayıcı sınıfına sahiptir. Tam olarak, Çift sınıfındaki bir tamsayı ve mantıksal değeri kapsüllemek istiyorsanız, otomatik paket sizin için her şeyi yapar: Çifti <Tamsayı, Boole> obj = yeni Çifti <> (25, doğru).

Bir başka ciddi sınırlamaBir tür parametresi örneği oluşturmanın imkansızlığı. Yani, aşağıdaki satır bir derleme hatasına neden olacaktır: T ilk = yeni T (). Bu bellidir, çünkü tam bir sınıf veya soyut bir arayüzün argüman olarak geçip geçmeyeceğini önceden bilmiyorsunuz. Aynı şey diziler oluşturmak için de geçerli.

Sınırlı tipler

Oldukça sık olduğu durumlar vardırJava genel sınıfına bir argüman olarak iletilebilecek tiplerin listesini sınırlamak gerekir. Bizim Pair sınıfımızda onlar üzerinde daha fazla matematiksel işlemler için münhasıran sayısal değerleri kapsüllemek istediğimizi varsayalım. Bunu yapmak için, tip parametresinin üst sınırını ayarlamamız gerekir. Bu, açılı ayraçlardan geçen tüm argümanlar tarafından devralınan bir üst sınıf beyanı kullanılarak uygulanır. Bunun gibi görünecek: sınıf çifti <T, Number>. Bu şekilde, derleyici T parametresi yerine, Number sınıfını veya alt sınıflarından birini değiştirebileceğini öğrenir.

Bu yaygın bir tekniktir. Bu tür kısıtlamalar genellikle tip sınıflarının aynı sınıftaki uyumluluğunu sağlamak için kullanılır. Pair sınıfımıza bir örnek düşünelim: class Pair <T, V T> 'yi uzatır. Burada tipi T keyfi olabilir derleyici anlatmak ve V tipi T tipi veya alt sınıflarından biri ya olmalıdır.

"Aşağıdan" kısıtlaması tam olarak aynıdırgörüntü, ancak kelime uzatır yerine, kelime süper yazılır. Yani, sınıf çifti <T süper ArrayList> bildirimi, T yerine, bir ArrayList veya devraldığı herhangi bir sınıf veya arabirimin yerine geçebileceğini gösterir.

Genel Java yöntemleri ve kurucular

Java genellemelerinde sadece sınıflara değil aynı zamanda yöntemlere de uygulanabilir. Yani, genelleştirilmiş yöntem sıradan sınıfta bildirilebilir.

jenerik java yöntemleri

Yukarıdaki şekilde görebileceğiniz gibi, genelleştirilmiş yöntemin beyanında karmaşık bir şey yoktur. Dönüş parantezini dönüş tipi yöntemden önce koymak ve bunlarda tip parametrelerini belirtmek yeterlidir.

Kurucu durumunda, her şey aynı şekilde yapılır:

java jenerik tip temizleme

Bu durumda açılı ayraçlar, herhangi bir değer döndürmediği için yapıcının adından önce yerleştirilir.

Java Generics: Tanım ve Yöntemler

Java Generics: Tanım ve Yöntemler

Related news

  • Susam Mantolu Tahinli Kek Tarifi
  • Nikotini Vücuttan Hızlı Atmanın Yolları
  • Tığ Oyası Sonbahar Yaprağı Modeli Yapılışı Anlatımlı Videolu
  • VİDEOLU VE RESİMLİ KURDELE NAKIŞI YAPILIŞI
  • Karın bölgesi egzersizleri ile Etiketlenen Konular

  • Java Generics: Tanım ve Yöntemler

    Java Generics: Tanım ve Yöntemler


    Java Generics: Tanım ve Yöntemler

    Java Generics: Tanım ve Yöntemler

    Java Generics: Tanım ve Yöntemler

    Java Generics: Tanım ve Yöntemler

    Java Generics: Tanım ve Yöntemler

    Java Generics: Tanım ve Yöntemler

    Java Generics: Tanım ve Yöntemler

    Java Generics: Tanım ve Yöntemler

    Java Generics: Tanım ve Yöntemler

    Java Generics: Tanım ve Yöntemler

    Java Generics: Tanım ve Yöntemler

    Java Generics: Tanım ve Yöntemler

    Java Generics: Tanım ve Yöntemler

    Java Generics: Tanım ve Yöntemler

    Java Generics: Tanım ve Yöntemler