Generics


  Introduced : J2SE 5.
  By using Generics we can store any type of objects. before generics we use collections, for storing different types of objects.

Advantages:
1.Type-Safety:  we can hold a single type of objects. can't store other objects.
2.No need of Type Casting : no need to type cast the objects.
  Ex: List list = new ArrayList();
        list.add("helloworld");
        String s = (String) list.get(0);//typecasting
with Generics
              List<String> list = new ArrayList<String>();
                            list.add("helloworld");
                            String s = list.get(0);
3. Compile time checking : there won't be any problem at runtime because it checked at compile time only.
Ex: List<String> list = new ArrayList<String>();
list.add("helloworld");
list.add(32);//Compile Time Error


How to use Generic Collection:
class/Interface<Type>

Ex1:General Example for Generic ArrayList

import java.util.ArrayList;
import java.util.Iterator;

public class TestGenerics {
public static void main(String[] args) {
ArrayList<String> list=new ArrayList<String>();
list.add("java");
list.add("C");
//list.add(12);//CompileTime Error

String s=list.get(1);//type casting is not required
System.out.println("Value is: "+s);

Iterator<String> itr=list.iterator();
while(itr.hasNext()){
System.out.println(itr.next());
}

}

}
----------------------------------------------------------------------------------------------------------------
1.Generic Class:
A class that can refer any type of object is known as generic class.

Creating:
class ExGen<T>{
T obj;
void add(T obj)
{
this.obj=obj;
}
T get()
{
return obj;
}
}
here 'T ' parameter used to create generic class of specific type.

using created Generics class:

class TestExGen{
public static void main(String args[]){
ExGen<Integer> x=new ExGen<Integer>();
x.add(12);
x.add("java");//CE(compile time error)
syso(x.get());
}
}

Type Parameters:
the naming conventions for type parameters are important. commonly used type parameters.
1.T---specifies Type
2.E---Specifies Element
3.K-- Specifies key
4.N--Specifies Number
5.V--specifies Value
-----------------------------------------------------------------------------------------------------------------
2.Generic Method:
used for accepting any type of argument.
ex:

public class TestGenMethod {
public static < E > void printElements(E[] elements) {
        for ( E element : elements){        
            System.out.println(element );
         }
          System.out.println();
    }
    public static void main( String args[] ) {
        Integer[] intElems = { 10, 20, 30, 40, 50 };
        Character[] charElems = { 'J', 'A', 'V', 'A', 'T','P','O','I','N','T' };

        System.out.println( "Printing Integer Elements" );
        printElements( intArray  );
        System.out.println( "Printing Character Elements" );
        printElements( charArray );
    }
}
---------------------------------------------------------------------------------------------------------------------
3.Wild Cards in Java Generics:
?--wild card character
ex: if we write <? extends Number>, i.e any child class of Number like Integer,Float,Doublet etc.
 Now we can call the method of Number class through any child class object.

import java.util.ArrayList;
import java.util.List;

public class TestWildcarGen{
//creating a method that accepts only child class of Element
public static void printElements(List<? extends Number> elems){
for(Number s:elems){
     System.out.println(s);

}
}
public static void main(String args[]){
List<Integer> list1=new ArrayList<Integer>();
list1.add(12); list1.add(42);

List<Float> list2=new ArrayList<Float>();
list2.add(12.89f);
list2.add(123.90f);

printElements(list1);
printElements(list2);

List<String> list3=new ArrayList<String>();
list3.add("java");
list3.add(".net");
printElements(list3); //CE


}}

Comments

Popular posts from this blog

Database Definition and DBMS