本帖最后由 王杰 于 2012-4-29 00:27 编辑
- /*张老师的高新技术里,有一段关于泛型类型不能放在数组里的说法。
- * 下面的代码在编译时就报错:
- ArrayList<String>[] al = new ArrayList<String>()[10];
- error:The type of the expression must be an array type but it resolved to ArrayList<String>
- 说表达式的类型必须是一个数组类型。
- 所以改写为张老师的写法:
- ArrayList<String>[] al = new ArrayList<String>[10];
- error:Cannot create a generic array of ArrayList<String>
- */
- // 但是我发现其实数组里面是可以放泛型类的,比如下面这段代码:
- ArrayList<String> al2[] = new ArrayList[2];
- ArrayList<String>[] genericArrs = al2;
- ArrayList<String> sub1 = new ArrayList<String>();
- sub1.add("Generic");
- sub1.add("Type");
- ArrayList<String> sub2 = new ArrayList<String>();
- sub2.add("abc");
- sub2.add("def");
-
- al2[0] = sub1;
- al2[1] = sub2;
-
- for (ArrayList<String> genericArr : genericArrs) {
- System.out.println(genericArr);
- }
- /*
- * 可以看出,下面这种做法就是利用中介量al2把第一种写法拆成了两块,
- * 我们知道编译器报错是因为语法有错,那么我们可以大胆猜想:
- * 其实,在数组中是可以存放泛型类型的,但是如果用一句代码来声明的话,
- * 会出现语法错误!
- * 我们知道,每一种高级语言在编译阶段会通过本身的语法规则,将高级语言翻译成汇编语言
- * 或者机器语言,然后才可以执行。java也是这样的,
- * 那么是不是因为第一种写法:ArrayList<String>[] al = new ArrayList<String>[10];
- * 的某个地方不符合语法规则,所以编译器报错。就像我开始写的那样,尖括号后面圆括号,圆括号后面方括号:
- *ArrayList<String>[] al = new ArrayList<String>()[10];
- * 自己推论的。说错了不要笑,呵呵,不知道你们是怎么理解的。*/
复制代码 |