“关于使用反射机制得到泛型的字段名的问题”的解答
一、问题
在之前的“关于使用反射机制得到泛型的字段名的问题”博客当中提到了问题,终于在看了《Effective Java》之后有所理解。
问题回顾1、实体类
public PrintInfo(T entry) {this.entry = entry;}这种编写方式中T entry这样的参数表示的是引用的概念,同时这表示一个特定的类型。类型推导而这个类型的推导过程是由entry的类型所推导出来的。编译器通过检查方法参数的类型来计算类型参数的值。对于如
private void printValue12(Class<?> clazz){System.out.println(clazz.getName());Field[] fields = clazz.getFields();for (Field f : fields) {System.out.println(f.getName());}}private <T> void printValue13(Class<T> clazz){System.out.println(clazz.getName());Field[] fields = clazz.getFields();for (Field f : fields) {System.out.println(f.getName());}}两段代码可以呢?原因还是在以上的解答,在这里,Class<?>存储的是类型信息,而传递来的.class正是类型信息。不管是Class<?>还是Class<T>都是类型信息,而T entry 这种方式传递的是引用。三、总结Class<?>是类型信息的概念。T entry 这种是引用的概念,在这种方式下有类型推导的过程。正是因为对两者概念的不清楚导致了错误的产生。