最近项目中遇到了Json数据自动获取的功能,不然令人想起java的反射,已经很长时间没复习java了正好一块连java的这一块内容一起过一遍。java中的反射无疑就相当于java开发者的春天,在众多的框架中也能看到它的身影,可以在运行时检查类,接口、变量和方法等信息,可以实例化调用方法以及设置变量值等。本文主要以代码的形式直接将反射,泛型的运用展现出来。

java中的反射

首先新建一个基础类Author。

Java反射类 绕过类泛型 java反射设置泛型_泛型

然后新建一个反射类,运用反射方法对上面的类进行访问.包括对私有方法的访问,对私有属性的访问等。其中常用的一些方法以及解释:

Java反射类 绕过类泛型 java反射设置泛型_java_02

Java反射类 绕过类泛型 java反射设置泛型_java_03

Java反射类 绕过类泛型 java反射设置泛型_Java反射类 绕过类泛型_04

Java反射类 绕过类泛型 java反射设置泛型_java_05

通过控制台打印以上信息:查看运用结果

ReflectClass.reflectNewInstance();ReflectClass.reflectPrivateField();ReflectClass.reflectPrivateConstructor();ReflectClass.reflectMethod();

运行结果:

Java反射类 绕过类泛型 java反射设置泛型_Java反射类 绕过类泛型_06

泛型的运用

对于泛型其实很好理解,通俗点讲就是我们将类型也当成了参数进行传值,这样做代码的安全性很大的被提升了,也为较大的优化带来可能。泛型可以使编译器知道一个对象的限定类型是什么,这样编译器就可以在一个高的程度上验证这个类型消除了强制类型转换 使得代码可读性好,减少了很多出错的机会。但是也要记住泛型的规范,比如静态的变量和方法不能引用泛型变量,我们也不能利用instanceof等方法对泛型的类型进行判断,当然这样做也毫无意义,重要的一点是泛型类不能继承Exception或者Throwable。泛型的继承中,不论子类是否为泛型类,所继承和实现的父类接口都有被指定。

常用的泛型类型变量:

E:元素(Element)

K:关键字(Key)

N:数字(Number)

T:类型(Type)

V:值(Value)

另外泛型界定的概念主要是指对泛型类型进行一个限定。比如:

public static T add(T str1, T str2) { return "";}

利用泛型和反射实现对json数据的保存

Java反射类 绕过类泛型 java反射设置泛型_java_07

我们想把以上的实现封装起来,这时就用了泛型。

Java反射类 绕过类泛型 java反射设置泛型_Java反射类 绕过类泛型_08

调用实现:

public static void main(String[] args) {// TODO Auto-generated method stubString json = "{\"name\":\"李先生\",\"age\":82}";//ReflectJson.getJson();//解析json然后换成实体类Author author=getJsonClass(json, Author.class);System.out.print( author.toString());}

运行结果:

Java反射类 绕过类泛型 java反射设置泛型_Java反射类 绕过类泛型_09

Java反射类 绕过类泛型 java反射设置泛型_java反射泛型的作用_10