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);
}
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