```java
interface Generator<T> {
T next();
}
public class BasicGenerator<T> implements Generator<T> {
private Class<T> type;
public BasicGenerator(Class<T> type) {
this.type = type;
}
@
Override public T next() {
try {
return type.newInstance();
} catch (InstantiationException | IllegalAccessException e) {
throw new RuntimeException(e);
}
}
public static <T> Generator<T> create(Class<T> type) {
return new BasicGenerator<T>(type);
}
public <T> Generator<T> create1(Class<T> type) {
return new BasicGenerator<T>(type);
}
public <T> void test (T t) {
System.out.println(t.getClass().getName());
}
public static void main(String[] args) {
Generator<Integer> gen = BasicGenerator.create(Integer.class);
for (int i = 0; i < 5; i++) {
System.out.println(gen.next());
}
//gen.creat1(String.class); 以下两行编译报错
//gen.test(1);
}
}
```
各位,不好意思,又有个问题。这是我对上面的解释:
create 方法是静态的泛型方法,而泛型类 BasicGenerator 的类型参数是与对象相关的,所以 create 方法里的 T 不是泛型类的 T。
而 create1 方法是成员的泛型方法,因为对象 gen 已经被创建出来了,所以 create 方法里的 T 就是泛型类 BasicGenerator 的 T。也就是说,T 是 Inteter,现在所有的成员方法你都要把 T 看做 Integer 了。所以那两行会报错(是不是可以理解:使用同一个类型参数的情况下,只有在非泛型类里的成员泛型方法才能体现出泛型方法的灵活性,即泛型方法能够独立于类而产生变化)。报错信息如下:
Error:(39, 12) java: 找不到符号
符号: 方法 creat1(java.lang.Class<java.lang.String>)
位置: 类型为 Generator<java.lang.Integer>的变量 gen
Error:(40, 12) java: 找不到符号
符号: 方法 test(int)
位置: 类型为 Generator<java.lang.Integer>的变量 gen