Generic programming
    public class x
    {
    private String s;
    public x(String s){this.s = s;}
    public String getS(){return s;}
    }
    if we need many classes with the same function but different instance field type.
    we can
    1. declare them all individually
    2. use a generic class(better)
   
    a generic is a class that takes a type as a parameter
   
    public class x <T>
    {
    private T s;
    public x(T s){this.s=s;}
    public T getS(){return s;}
    }
   
    x<String&lgt; myX = new x<String&lgt;("hello");
   
    Note:
    -constructor declared in the class as
    public x(......)
   
    but called as x<String&lgt;(....)
    -The type associated with the generic can be any reference type
    (i.e. any object type)
   
    e.g. String, GregorianCalendar, JFrame and so on.
   
    -Cannot use primitives
    e.g. x<int&lgt; myX = new x<int&lgt;(36) is illegal
   
    -There exist "wrapper" subjects for every primitive type.
    int -&lgt; Integer
    char -&lgt; Character
    double -&lgt; Double
    and so on...
   
    x<Integer&lgt; myX = new x<Integer&lgt;(36); is legal
   
    more illegal uses of the type parameter "T"
   
    T myT = new T(); not okay
    T[] myTArray = new T[10]; not okay
   
    cannot create an array of generics.
    x<String&lgt;[] myXarray = new x <String&lgt;[10] is illegal
   
    can a generic take more than one type ?
    the answer is yes.
   
    public class TwoTypeGeneric <FirstType, SecondType&lgt;
    {
    codes here
    }
   
    restricting Types
    you may wish to constrain the type parameter as follows
    1.the child of a given class
    2. implements a give interface
    why?
    can use methods associated with the ancestor/interface
    usage: the extends keyword is used for both interfaces and ancestors.
   
    Require that T implements myInterface
   
    public class x<T extends myInterface&lgt;
   
    require that T is a descendant of ancestor
    public class x<T extends ancestor&lgt;
   
    Also legal to require more than one
    at most one is a class and the rest can be interface
    _ use ampersands (&) to be seperator
    T -&lgt; descendant of class B
    implement interface C,D
    public class x<T extends B&C&D&lgt;   
Wednesday, March 7, 2007
Lecture 21
Subscribe to:
Post Comments (Atom)
 
No comments:
Post a Comment