Учу понемногу Java и напоролся на такое:
public class Main {
public static class MyTestClass<T>{
private T[] myAr;
private int curItem=0;
private int count=10;
MyTestClass(){
myAr = (T[]) new Object[count]; //Этот код работает
for(int i=0; i<myAr.length; i++){
myAr[i] = (T) new Object(); //Этот код работает
}
}
void set(T value){
if(curItem<count) {
myAr[curItem++] = value;
}
}
T get(int index){
return myAr[index];
}
}
public static void main(String[] args){
MyTestClass<Integer> myTestClass = new MyTestClass<Integer>();
myTestClass.set(12);
System.out.println(myTestClass.get(0));
String[] str = (String[]) new Object[10]; //Этот код не работает, хотя, как мне кажется, делает тоже самое
}
}
Внимание, вопрос!
myAr = (T[]) new Object[count];
...
myAr[i] = (T) new Object();
Почему это работает? Почему он может скастовать Object до дочерних классов внутри обобщенных классов? хотя при явном указании типов как здесь:
String[] str = (String[]) new Object[10];