直接上两个例子
public class Test1 {
public static void main(String[] args) {
Test1 test1 = new Test1();
String goods = test1.shop("ruler");
System.out.println("您购买了:" + goods);
}
public String shop(String goods){
if ("ruler".equals(goods)){
return goods;
}else if ("rubber".equals(goods)){
return goods;
}else if ("pen".equals(goods)){
return goods;
}else{
return null;
}
}
}
import java.lang.reflect.Method;
public class Test2 {
public static void main(String[] args) throws Exception{
Test2 test2 = new Test2();
String goods = test2.shop("ruler");
System.out.println("您购买了:" + goods);
}
private String shop(String goods) throws Exception{
//获取class文件
Class<Goods> clazz = Goods.class;
//获取class中方法名(无参数可传参数class类型)
//参数1:方法名 类型:String
//参数2:参数类型 类型:Class ,可传入多个 ,(无参数可传参数class类型)
Method method = clazz.getDeclaredMethod(goods);
//执行方法
//参数1:类实例 类型: 例如:new Object();
//参数2:实力中调用的方法的入参值 类型:同实际调用的方法入参类型,可传入多个 ,(无参数可传参数class类型)
goods = (String) method.invoke(clazz.newInstance());
return goods;
}
}
class Goods{
public String ruler(){
return "ruler";
}
public String rubber(){
return "rubber";
}
}
这两段代码main函数的运行结果都是:
您购买了:ruler
但是我们为什么要使用反射来写代码呢?
首先:如果我们要增加一个功能:让商店销售pen(钢笔)
在非反射的Test1中则需修改shop方法:
public String shop(String goods){
if ("ruler".equals(goods)){
return goods;
}else if ("rubber".equals(goods)){
return goods;
}else if ("pen".equals(goods)){
return goods;
}else{
return null;
}
}
而在用反射写的Test2中则需要在Goods类中添加一个新方法 pen:
class Goods{
public String ruler(){
return "ruler";
}
public String rubber(){
return "rubber";
}
public String pen(){
return "pen";
}
}
这样做的好处是什么呢?
答:最大的好处就是松耦合,防止代码侵入
在日常开发中如果能尽量做到增加功能,但少改动别人的代码
总结
1、可以去掉ifelse,这也是要根据业务需求,比如:
业务就2,3个if语句,那基本不需要使用反射
如果是5,6个ifelse并且预计以后还会扩展,
或者是多个ifelse中还有多个ifelse嵌套,并且预计还会扩展,反射可能能解决你的问题
2、使用反射写出的代码,可以提高代码的封装程度,
让代码体现高内聚低耦合的特点,使代码更符合设计原则
3、添加功能,修改功能时,可以更关注功能部分,
而更少的考虑修改、添加是否会影响其他功能,
做到了松耦合,防止代码侵入,也更符合开闭原则
4、使用反射会降低程序运行的性能,但是基本可以忽略不记,
java反射库提供了很多优化暴露的api,以后有时间考虑写博文
———转载,请注明出处和相关链接,谢谢!———