利用 Java 的反射机制简化条件分支
前言
想必大家在 OOpre 都曾经历过面对几十个条件分支的情况,普通的做法是一个个写 if-else
语句,但很显然这一点也不优雅。我们为什么不能在情况“1”直接执行“op1”这个方法呢?事实上这是可以的,而如此简化代码后,在调用处理条件分支时就只需要执行op%d
这个方法了,岂不美哉。
做法
具体地来说,Java 语言有一个“反射”机制,可以做到这一点。
Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期 借助于 ReflectionAPI 取得任何类的内部信息,并能直接操作任意对象的内 部属性及方法。加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。这个对象就像一面镜子,透过这个镜子看到类的结构,所以,我们形象的称之为:反射。
Java不是动态语言,但Java可以称之为“准动态语言”。即Java有一定的动态性,我们可以利用反射机制、字节码操作获得类似动态语言的特性。 Java的动态性让编程的时候更加灵活!
具体来说,你需要先确定方法的命名方式,比如 op%d
,然后写好对应的方法,最后利用反射机制调用对应的方法。
在调用方法时,由于 Java 面向对象语言的特性,因此需要给定传参的类型以处理可能存在的重载方法。
也就是必须要完整地给出 getMethod(<MethodName>, <ArgumentClasses>)
,不然会报错。
同时,不处理异常情况也会报错。
示例:
1 | public class Commands { |