Java Jenerikleri J2SE 5'te programlama türü güvenli nesnelerle ilgilenmek için tanıtıldı. Derleme zamanında hataları tespit ederek kodu kararlı hale getirir.
MySQL sütun türünü değiştir
Jeneriklerden önce, koleksiyondaki her türlü nesneyi, yani jenerik olmayanları saklayabiliriz. Artık jenerikler, Java programcısını belirli bir nesne türünü depolamaya zorluyor.
Java Jeneriklerinin Avantajı
Jenerik ilaçların başlıca 3 avantajı vardır. Bunlar aşağıdaki gibidir:
1) Tip güvenliği: Jeneriklerde yalnızca tek bir nesne türünü tutabiliriz. Başka nesnelerin saklanmasına izin vermez.
Jenerikler olmadan her türlü nesneyi saklayabiliriz.
List list = new ArrayList(); list.add(10); list.add('10'); With Generics, it is required to specify the type of object we need to store. List list = new ArrayList(); list.add(10); list.add('10');// compile-time error
2) Tip dökümü gerekli değildir: Nesneyi yazmaya gerek yoktur.
Generics'ten önce cast yazmamız gerekiyor.
List list = new ArrayList(); list.add('hello'); String s = (String) list.get(0);//typecasting After Generics, we don't need to typecast the object. List list = new ArrayList(); list.add('hello'); String s = list.get(0);
3) Derleme Zamanı Kontrolü: Derleme zamanında kontrol edilir, böylece çalışma zamanında sorun oluşmaz. İyi programlama stratejisi, sorunu derleme zamanında çözmenin çalışma zamanından çok daha iyi olduğunu söylüyor.
List list = new ArrayList(); list.add('hello'); list.add(32);//Compile Time Error
Sözdizimi genel koleksiyonu kullanmak
ClassOrInterface
Örnek Java'da Jenerikleri kullanmak için
ArrayList
Java'daki Jeneriklerin Tam Örneği
Burada ArrayList sınıfını kullanıyoruz ama siz ArrayList, LinkedList, HashSet, TreeSet, HashMap, Comparator vb. gibi herhangi bir koleksiyon sınıfını kullanabilirsiniz.
ağaç haritası
import java.util.*; class TestGenerics1{ public static void main(String args[]){ ArrayList list=new ArrayList(); list.add('rahul'); list.add('jai'); //list.add(32);//compile time error String s=list.get(1);//type casting is not required System.out.println('element is: '+s); Iterator itr=list.iterator(); while(itr.hasNext()){ System.out.println(itr.next()); } } }
import java.util.*; class TestGenerics1{ public static void main(String args[]){ ArrayList list=new ArrayList(); list.add('rahul'); list.add('jai'); //list.add(32);//compile time error String s=list.get(1);//type casting is not required System.out.println('element is: '+s); Iterator itr=list.iterator(); while(itr.hasNext()){ System.out.println(itr.next()); } } }Şimdi Test Edin
Çıktı:
element is: jai rahul jai
Harita kullanan Java Generics örneği
Şimdi jenerikleri kullanarak harita elemanlarını kullanacağız. Burada anahtar ve değer aktarmamız gerekiyor. Basit bir örnekle anlayalım:
import java.util.*; class TestGenerics2{ public static void main(String args[]){ Map map=new HashMap(); map.put(1,'vijay'); map.put(4,'umesh'); map.put(2,'ankit'); //Now use Map.Entry for Set and Iterator Set<map.entry> set=map.entrySet(); Iterator<map.entry> itr=set.iterator(); while(itr.hasNext()){ Map.Entry e=itr.next();//no need to typecast System.out.println(e.getKey()+' '+e.getValue()); } }} </map.entry></map.entry>Şimdi Test Edin
Çıktı
1 vijay 2 ankit 4 umesh
genel sınıf
Herhangi bir türe atıfta bulunabilen bir sınıf, genel sınıf olarak bilinir. Burada, belirli bir türün genel sınıfını oluşturmak için T type parametresini kullanıyoruz.
Genel sınıfı oluşturmak ve kullanmak için basit bir örnek görelim.
Genel bir sınıf oluşturmak:
class MyGen{ T obj; void add(T obj){this.obj=obj;} T get(){return obj;} }
T türü herhangi bir türe (String, Integer ve Employee gibi) başvurabileceğini belirtir. Sınıf için belirttiğiniz tür, verileri depolamak ve almak için kullanılacaktır.
Genel sınıfı kullanma:
Genel sınıfı kullanacak kodu görelim.
class TestGenerics3{ public static void main(String args[]){ MyGen m=new MyGen(); m.add(2); //m.add('vivek');//Compile time error System.out.println(m.get()); }}Şimdi Test Edin
Çıktı
2
Tip Parametreleri
Tür parametreleri adlandırma kuralları jenerikleri iyice öğrenmek için önemlidir. Ortak tip parametreleri aşağıdaki gibidir:
json'a java nesnesi
- T-tipi
- E - Eleman
- K - Anahtar
- N - Sayı
- V - Değer
Genel Yöntem
Genel sınıf gibi, her türlü argümanı kabul edebilen genel bir yöntem oluşturabiliriz. Burada argümanların kapsamı, bildirildiği yöntemle sınırlıdır. Statik ve statik olmayan yöntemlere izin verir.
Dizi öğelerini yazdırmak için Java genel yönteminin basit bir örneğini görelim. Burada kullanıyoruz VE elemanı belirtmek için.
public class TestGenerics4{ public static void printArray(E[] elements) { for ( E element : elements){ System.out.println(element ); } System.out.println(); } public static void main( String args[] ) { Integer[] intArray = { 10, 20, 30, 40, 50 }; Character[] charArray = { 'J', 'A', 'V', 'A', 'T','P','O','I','N','T' }; System.out.println( 'Printing Integer Array' ); printArray( intArray ); System.out.println( 'Printing Character Array' ); printArray( charArray ); } }Şimdi Test Edin
Çıktı
Printing Integer Array 10 20 30 40 50 Printing Character Array J A V A T P O I N T
Java Jeneriklerinde Joker Karakter
? (soru işareti) sembolü joker karakter öğesini temsil eder. Her türlü anlamına gelir. Eğer yazarsak, Number'ın herhangi bir alt sınıfı anlamına gelir; örneğin Integer, Float ve double. Artık Number sınıfının yöntemini herhangi bir alt sınıf nesnesi aracılığıyla çağırabiliriz.
Joker karakter olarak kullanabiliriz bir parametrenin türü, alan, dönüş türü veya yerel değişken. Ancak genel yöntem çağrısı, genel sınıf örneği oluşturma veya üst tür için tür bağımsız değişkeni olarak joker karakter kullanılmasına izin verilmez. .
Aşağıda verilen örnekle bunu anlayalım:
import java.util.*; abstract class Shape{ abstract void draw(); } class Rectangle extends Shape{ void draw(){System.out.println('drawing rectangle');} } class Circle extends Shape{ void draw(){System.out.println('drawing circle');} } class GenericTest{ //creating a method that accepts only child class of Shape public static void drawShapes(List lists){ for(Shape s:lists){ s.draw();//calling method of Shape class by child class instance } } public static void main(String args[]){ List list1=new ArrayList(); list1.add(new Rectangle()); List list2=new ArrayList(); list2.add(new Circle()); list2.add(new Circle()); drawShapes(list1); drawShapes(list2); }}
Çıktı
drawing rectangle drawing circle drawing circle
Üst Sınırlı Joker Karakterler
Üst sınırlı joker karakterlerin amacı değişken üzerindeki kısıtlamaları azaltmaktır. Bilinmeyen türün belirli bir tür veya o türün bir alt türü olmasını kısıtlar. Joker karakterin ('?') bildirilmesi ve ardından extends (sınıf durumunda) veya uygulama (arayüz durumunda) anahtar sözcüğünün ve ardından üst sınırının gelmesiyle kullanılır.
Sözdizimi
List
Burada,
? bir joker karakterdir.
uzanır , bir anahtar kelimedir.
Sayı , Java.lang paketinde bulunan bir sınıftır
java programı
Diyelim ki Number ve alt tiplerinin (Integer, Double gibi) listesi için method yazmak istiyoruz. Kullanma Liste Number tipinin veya alt sınıflarından herhangi birinin listesi için uygundur, oysa Liste yalnızca Number türü listesiyle çalışır. Bu yüzden, Liste göre daha az kısıtlayıcıdır Liste .
Üst Sınır Joker Karakter Örneği
Bu örnekte, List ve List'in yöntemini yazmak için üst sınır joker karakterlerini kullanıyoruz.
import java.util.ArrayList; public class UpperBoundWildcard { private static Double add(ArrayList num) { double sum=0.0; for(Number n:num) { sum = sum+n.doubleValue(); } return sum; } public static void main(String[] args) { ArrayList l1=new ArrayList(); l1.add(10); l1.add(20); System.out.println('displaying the sum= '+add(l1)); ArrayList l2=new ArrayList(); l2.add(30.0); l2.add(40.0); System.out.println('displaying the sum= '+add(l2)); } }Şimdi Test Edin
Çıktı
displaying the sum= 30.0 displaying the sum= 70.0
Sınırsız Joker Karakterler
Sınırsız joker karakter türü, List gibi bilinmeyen bir türün listesini temsil eder. Bu yaklaşım aşağıdaki senaryolarda faydalı olabilir: -
- Verilen yöntem Object sınıfında sağlanan işlevsellik kullanılarak uygulandığında.
- Genel sınıf, type parametresine bağlı olmayan yöntemleri içerdiğinde.
Sınırsız Joker Karakter Örneği
import java.util.Arrays; import java.util.List; public class UnboundedWildcard { public static void display(List list) { for(Object o:list) { System.out.println(o); } } public static void main(String[] args) { List l1=Arrays.asList(1,2,3); System.out.println('displaying the Integer values'); display(l1); List l2=Arrays.asList('One','Two','Three'); System.out.println('displaying the String values'); display(l2); } }Şimdi Test Edin
Çıktı
displaying the Integer values 1 2 3 displaying the String values One Two Three
Alt Sınırlı Joker Karakterler
Alt sınırlanmış joker karakterlerin amacı, bilinmeyen türün belirli bir tür veya o türün bir üst türü olmasını kısıtlamaktır. Joker karakterin ('?') ardından süper anahtar kelimenin ve ardından alt sınırının bildirilmesiyle kullanılır.
Sözdizimi
List
Burada,
? bir joker karakterdir.
Süper , bir anahtar kelimedir.
Tamsayı , bir sarmalayıcı sınıfıdır.
js ayar zaman aşımı
Diyelim ki Tamsayı listesi ve onun üst tipi (Numara, Nesne gibi) için yöntem yazmak istiyoruz. Kullanma Liste Tamsayı tipinin veya onun üst sınıflarından herhangi birinin bir listesi için uygundur, oysa Liste yalnızca Tamsayı türü listesiyle çalışır. Bu yüzden, Liste olduğundan daha az kısıtlayıcıdır Liste .
Alt Sınır Joker Karakter Örneği
Bu örnekte, List ve List yöntemini yazmak için alt sınır joker karakterlerini kullanıyoruz.
import java.util.Arrays; import java.util.List; public class LowerBoundWildcard { public static void addNumbers(List list) { for(Object n:list) { System.out.println(n); } } public static void main(String[] args) { List l1=Arrays.asList(1,2,3); System.out.println('displaying the Integer values'); addNumbers(l1); List l2=Arrays.asList(1.0,2.0,3.0); System.out.println('displaying the Number values'); addNumbers(l2); } }Şimdi Test Edin
Çıktı
displaying the Integer values 1 2 3 displaying the Number values 1.0 2.0 3.0