引言
反射基本
p.s: 本文须要读者对反射机制的API有必定程度的懂得,如不雅之前没有接触过的话,建议先看一下官方文档的Quick Start。
在应用反射机制之前,起首我们先来看一下若何获取一个对象对应的反射类Class,在Java中我们有三种办法可以获取一个对象的反射类。
在Java中,每一个Object都有一个getClass()办法,经由过程getClass办法我们可以获取到这个对象对应的反射类:
我们也可声调用Class类的静态办法forName():
- String s = "http://www.ziwenxie.site";
- Class<?> c = s.getClass();
【编辑推荐】
- 数据显示Java热度持续下落,日子屈指可数?
- 深刻商量Java中的异常与缺点处理
- JavaScript异步与Promise实现
- JavaScript深刻之创建对象的多种方法以及优缺点
- 给Java开辟者的10个大年夜数据对象和框架
经由过程forName办法
与注解相结合
- Class<?> c = Class.forName("java.lang.String");
应用.class
或者我们也可以直接应用.class:
- Class<?> c = String.class;
获取类型信息
在文┞仿开首我们就提到反射的一大年夜好处就是可以许可我们在运行时代获取对象的类型信息,下面我们经由过程一个例子来具体看一下。
膳绫擎这个场景应用模板办法和装潢器模式都可以解决,在Spring中是经由过程动态代劳来实现的,下面我们经由过程一个例子来模仿一下Spring中的AOP实现。
起首我们在typeinfo.interfacea包下面新建一个接口A:
- package typeinfo.interfacea;
- public interface A { void f(); }
接着我们在typeinfo.packageaccess包下面新建一个类C,类C实现了接口A,并且我们还别的创建了几个用于测试的办法,留意下面几个办法的权限都是不合的。
- package typeinfo.packageaccess;
- import typeinfo.interfacea.A;
- class C implements A {
- public void f() { System.out.println("public C.f()"); }
- public void g() { System.out.println("public C.g()"); }
- protected void v () { System.out.println("protected C.v()"); }
- void u() { System.out.println("package C.u()"); }
- private void w() { System.out.println("private C.w()"); }
- }
- public class HiddenC {
- public static A makeA() { return new C(); }
- }
在callHiddenMethod()办法中我们用到了几个新的API,个中getDeclaredMethod()根据办法名用于获取Class类指代对象本身声明的某个办法,然后我们经由过程调用invoke()办法就可以触发对象的相干办法:
推荐阅读
常见用法: netstat –npl 可以查看你要打开的端口是否已经打开。 netstat –rn 打印路由表信息。 netstat –in 供给体系上的接口信息,打印每个接口的MTU,输入分>>>详细阅读
本文标题:Java反射机制应用实践
地址:http://www.17bianji.com/lsqh/35285.html
1/2 1