java通过反射调用方法

业务中有个场景是这样的,根据传入不同的值生成不同的消息体。这个时候如果用switch或ifelse的话那每一层代码都很多,而且不利于维护。于是想到一个方法,根据传入的参数调用不同的方法(参数即方法),这样便于维护也利于代码的健壮性。代码如下(示例):
//先获取方法,type方法名,this.getclass()参数类型,如果是多个则为数组
//需要注意两点:1.如果方法名不正确的话会报错2.如果方法为私有的话会报错。都是NoSuchMethodException错误,提示找不到方法
//调用私有方法可以用Method privateMethod = Clazz.getDeclaredMethod();privateMethod.setAccessible(true);
Method method = MsgCustomtype.class.getMethod(type,this.getClass());
//再使用invoke()方法调用,第一个参数初始化类,第二参数为传参
//需要注意两点:1.第一个参数必须初始化或方法为static,第二个参数传参类型必须正确,没有传参则不填,有传参则为数组
Object msgCont = method.invoke(MsgCustomtype.class.newInstance(),msgCustomtype);

 

反射的好处是通过反射可以获取类的信息,可以灵活的创建对象以及调用方法,极大的增强了代码的灵活性。框架中也有很多地方用到了反射,例如各框架中读取xml配置,例如spring中的注解。

利用反射需要注意以下三点:

1.性能第一 

2.安全限制

3.内部暴露

优缺点及用途可参考https://blog.csdn.net/u010154380/article/details/78150251

你可能感兴趣的:(java)