来自:ZiWenXiejava
连接:https://www.ziwenxie.site/2017/03/22/java-reflection/设计模式
前言ui
Java反射机制是一个很是强大的功能,在不少大型项目好比Spring, Mybatis中均可以看见反射的身影。经过反射机制咱们能够在运行期间获取对象的类型信息,利用这一特性咱们能够实现工厂模式和代理模式等设计模式,同时也能够解决Java泛型擦除等使人苦恼的问题。本文咱们就从实际应用的角度出发,来应用一下Java的反射机制。spa
p.s: 本文须要读者对反射机制的API有必定程度的了解,若是以前没有接触过的话,建议先看一下官方文档的Quick Start。设计
在应用反射机制以前,首先咱们先来看一下如何获取一个对象对应的反射类Class
,在Java中咱们有三种方法能够获取一个对象的反射类。代理
在Java中,每个Object
都有一个getClass()
方法,经过getClass方法咱们能够获取到这个对象对应的反射类:code
/** * 经过getClass获取反射类 * Created by zhangyhk on 2017/5/24. */ public class getClassTest { public static void main(String[] args) { Student s =new Student(); Class<?> c = s.getClass(); } }
经过forName方法对象
咱们也能够调用Class
类的静态方法forName()
:文档
/** * 经过forName方法获取反射类 * Created by zhangyhk on 2017/5/24. */ public class forNameTest { public static void main(String[] args) { try { Class<?> c = Class.forName("www.westinfo.reflect.Student"); System.out.println(c); } catch (ClassNotFoundException e) { e.printStackTrace(); } } }
使用.classget
或者咱们也能够直接使用.class
:
Class<?> c = String.class; |