java中反射的好处以及应用

直接上两个例子

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,以后有时间考虑写博文

———转载,请注明出处和相关链接,谢谢!———

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值