I've got the following code:
public class GenericsTest<T> {
private T[] array1;
private String[] array2;
public GenericsTest() {
array1 = (T[]) new Object[10];
array2 = (String[]) new Object[10];
}
public T[] getArray1() {
return array1;
}
public void setArray1(T[] array1) {
this.array1 = array1;
}
public String[] getArray2() {
return array2;
}
public void setArray2(String[] array2) {
this.array2 = array2;
}
public static void main(String[] args) {
new GenericsTest<String>();
}
}
Code crushes at line:
array2 = (String[]) new Object[10];
But it works fine with:
array1 = (T[]) new Object[10];
As you can see in main()
method, T
is a String
. So I guess compiler will change T to String in
private T[] array1;
and array1 = (T[]) new Object[10]
will be translated to
array1 = (String[]) new Object[10]
So why
array2 = (String[]) new Object[10]
fails and (T[]) new Object[10]
doesn't?