Hi all
I have a major doubt about generics related to the following code shown below.This code is a question from javabeat.net generics mock exam.
code:
class Basket<E> {
private E element;
public void setElement(E x) {
element = x;
}
public E getElement() {
return element;
}
}
class
Fruit {
}
class Apple extends Fruit {
}
class Orange extends Fruit {
}
class GeneTest{
public static void main(
String args[]){
Basket<Fruit> basket = new Basket<Fruit>(); // 1
basket.setElement(new Apple()); // 2
Apple apple = basket.getElement(); // 3
}
The answer to the question is that The line 3 however will cause a runtime error. The result type of the methode getElement of Basket<Fruit> is Fruit. We cannot assign a Fruit to a variable of the type Apple without a cast.
According to me the answer to this code would be that it generates a compiler error at line 2.Because i thought that Basket class is parametarized to contain only Fruits.even though Apple class is a subclass of the Fruit class i thought as generics go against subtyping it would cause an compiler error.
can anyone explain this concept in a better way..
Thank you..