I was wondering whether I understand the following Java issue correctly. Given a generic collection, if I do
public class HashTable<V extends Comparable<V>> implements HashTableInterface<V> {
private V[] array;
public HashTable() {
this.array = (V[]) new Object[10];
}
}
the code breaks, throwing an exception: java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Comparable;
However, if I change this.array = (V[]) new Object[10]; to this.array = (V[]) new Comparable[10]; then it works.
The way I understand it is that upon compilation the resulting bytecode will not have any generic references as they are replaced by Java's type erasure.
this.array = (V[]) new Object[10]; breaks because the line will implicitly be replaced by this.array = (Comparable[]) new Object[10]; which will then result in a cast exception as Object does not extend Comparable. It is resolved by changing it to an array of Comparables.
Is this correct? Thanks!
Objectdoesn't extendsComparableso it cannot be cast toV