import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
public class Ans {
public static void main(String[] args) {
A []a1 = new A[4];
//! a1[0] = new B(); 编译时报错
ArrayList<A> a2 = new ArrayList<>();
//! a2.add(new B()); 带有标签的情况会在编译时报错
ArrayList a3 = new ArrayList();
a3.add(new B());
a3.add(new A());
Object b = a3.get(0); //这种情况只能得到Object,如果想得到具体类型,需要转型,错误的转型会导致运行时报错,所以最好不要使用无标签的泛型
//对于java SE5 deepToString的使用
Integer [][]x = {{1,2,3},{4,5,6}};
System.out.println(Arrays.deepToString(x));
//对粗糙数组的使用
Random rand = new Random(47);
Integer [][][]y = new Integer[rand.nextInt(5)][][];
for (int i = 0;i<y.length;++i) {
y[i] = new Integer[rand.nextInt(5)][];
for (int j = 0;j<y[i].length;++j)
y[i][j] = new Integer[rand.nextInt(5)];
}
System.out.println(Arrays.deepToString(y));
//对泛型与数组间的一些研究
//! List<Integer>[] ls = new List<Integer>[10]; 你不能直接实例化一个泛型数组,因为泛型具有擦除,而数组需要具体的类检查机制
List<Integer>[] ls = (List<Integer> []) new List[10]; //但你可以这么做
//! ls[0] = new ArrayList<String>(); //而且会提供检查机制
//! ls = (List<Object> []) ls; 这样明显也是不可以的,根据泛型机制List<Object>与List<Integer>没有关系
Object []ls2 = ls; //但这么做的可行性又给这种机制带来了潜在的威胁
ls2[1] = new A(); //可以放入一个不相关的东西了
}
}
class A {}
class B {}