15.11.1 小节 任何基本型都不能作型 的例子
import net.mindview.util.*; // Fill an array using a generator: class FArray { public static <T> T[] fill(T[] a, Generator<T> gen) { for(int i = 0; i < a.length; i++) a[i] = gen.next(); return a; } } public class PrimitiveGenericTest { public static void main(String[] ars) { //书上没说这句会报错,但编译报错 String[] strings = FArray.fill(new String[7], new RandomGenerator.String(10)); for(String s : strings) System.out.println(s); //书上没说这句会报错,但编译报错 Integer[] integers = FArray.fill(new Integer[7], new RandomGenerator.Integer()); for(int i: integers) System.out.println(i); // Autoboxing won't save you here. This won't compile:这句确实会报错 int[] b = FArray.fill(new int[7], new RandomGenerator.Integer()); } } /* Output: 这个例子很简单,只是想告诉我们,自动拆装箱,只能用在非数组的变量上。这里还得导入作者的 jar 包,很讨厌。(我想这里,作者是指,泛型方法的返回值,如果返回的 Integer[],不能拆箱为 int[])。顺着看这些作者写的类的源码,如下:
public class RandomGenerator { //省略 public static class String extends net.mindview.util.CountingGenerator.String { public String() { this.cg = new RandomGenerator.Character(); } public String(int length) { super(length); this.cg = new RandomGenerator.Character(); } } } 好了,这是一个静态内部类。但这个静态内部类还继承了别人,再去看:
public class CountingGenerator { //省略 public static class String implements Generator<java.lang.String> { private int length = 7; Generator<java.lang.Character> cg = new CountingGenerator.Character(); public String() { } public String(int length) { this.length = length; } public java.lang.String next() { char[] buf = new char[this.length]; for(int i = 0; i < this.length; ++i) { buf[i] = (java.lang.Character)this.cg.next(); } return new java.lang.String(buf); } } } 好了,找到源头了,原来它继承了 Generator<java.lang.String>,但我就不理解了,那为啥String[] strings = FArray.fill(new String[7], new RandomGenerator.String(10));会报错呢?类型参数 T 推断成 String 不就皆大欢喜了吗,怎么它还说推断不出来了呢。
第二个报错也没理解。 
