Pages

Thursday, 26 April 2012

Java bounding(custom generics)

In below example we can call inspect method by passing box object with number only.
We can not call inspect method by passing box object with sub-classes of number.
By this way we can implement custom generics.
public class Box<T> {

    private T t;
   
    public void add(T t) {
        this.t = t;
    }

    public T get() {
        return t;
    }

    public void inspect(Box<Number> n){ // Here if Box<? extends Number> then subclasses of number //will  be allowed
        System.out.println("T: " + t.getClass().getName());
       
    }

    public static void main(String[] args) {
        Box<Number> integerBox = new Box<Number>();
        integerBox.add(new Integer(10));
        // error: this is still String!
        Number n = new Number() {
           
            @Override
            public long longValue() {
                // TODO Auto-generated method stub
                return 0;
            }
           
            @Override
            public int intValue() {
                // TODO Auto-generated method stub
                return 0;
            }
           
            @Override
            public float floatValue() {
                // TODO Auto-generated method stub
                return 0;
            }
           
            @Override
            public double doubleValue() {
                // TODO Auto-generated method stub
                return 0;
            }
        };
        integerBox.inspect(integerBox);
    }

No comments:

Post a Comment