泛型和反射
174字小于1分钟
2024-08-08
Java
的部分反射 API
也是泛型。例如:Class<T>
就是泛型
// compile warning:
Class clazz = String.class;
String str = (String) clazz.newInstance();
// no warning:
Class<String> clazz = String.class;
String str = clazz.newInstance();
调用 Class
的 getSuperclass()
方法返回的 Class
类型是 Class<? super T>
Class<? super String> sup = String.class.getSuperclass();
构造方法 Constructor<T>
也是泛型
Class<Integer> clazz = Integer.class;
Constructor<Integer> cons = clazz.getConstructor(int.class);
Integer i = cons.newInstance(123);
我们可以声明带泛型的数组,但不能用 new
操作符创建带泛型的数组
Animal<String>[] ps = null; // ok
Animal<String>[] ps = new Animal<String>[2]; // compile error!
必须通过强制转型实现带泛型的数组
@SuppressWarnings("unchecked")
Animal<String>[] ps = (Animal<String>[]) new Animal[2];