logo

Java'daki jenerikler

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,&apos;vijay&apos;); map.put(4,&apos;umesh&apos;); map.put(2,&apos;ankit&apos;); //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()+&apos; &apos;+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(&apos;vivek&apos;);//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
  1. T-tipi
  2. E - Eleman
  3. K - Anahtar
  4. N - Sayı
  5. 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 = { &apos;J&apos;, &apos;A&apos;, &apos;V&apos;, &apos;A&apos;, &apos;T&apos;,&apos;P&apos;,&apos;O&apos;,&apos;I&apos;,&apos;N&apos;,&apos;T&apos; }; System.out.println( &apos;Printing Integer Array&apos; ); printArray( intArray ); System.out.println( &apos;Printing Character Array&apos; ); 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(&apos;drawing rectangle&apos;);} } class Circle extends Shape{ void draw(){System.out.println(&apos;drawing circle&apos;);} } 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(&apos;displaying the sum= &apos;+add(l1)); ArrayList l2=new ArrayList(); l2.add(30.0); l2.add(40.0); System.out.println(&apos;displaying the sum= &apos;+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(&apos;displaying the Integer values&apos;); display(l1); List l2=Arrays.asList(&apos;One&apos;,&apos;Two&apos;,&apos;Three&apos;); System.out.println(&apos;displaying the String values&apos;); 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(&apos;displaying the Integer values&apos;); addNumbers(l1); List l2=Arrays.asList(1.0,2.0,3.0); System.out.println(&apos;displaying the Number values&apos;); addNumbers(l2); } } 
Şimdi Test Edin

Çıktı

 displaying the Integer values 1 2 3 displaying the Number values 1.0 2.0 3.0