
public static void printMethods(Class cl)
{
Method[] methods =clgetDeclaredMethods();//返回一个包含方法对象的数组
for(Method m : methods)//循环该类的每个方法
{
Class retType = mgetReturnType();//该方法的返回类型,
Sting name = mgetName();//获得方法名
Systenoutprint(" "+ModifiertoString(mgetModifiers());打印方法修饰符
Systemoutprint(" "+retTypegetName() + " " + name +"(");
Class[] paramTypes = mgetParameterTypes();//获得一个方法参数数组(getparameterTypes用于返回一个描述参数类型的Class对象数组)
for(int j = 0 ; j < paramTypeslength ; j++)
{
if ( j > 0 ) Systemoutprint(" , "); //如果有多个参数,中间则用逗号隔开,否则直接打印参数
Systemoutprint (paramTypes[ j ]getName);
}
Systemoutprintln (" );");
}}
//////////getparameterTypes方法用于返回一个描述参数类型的Class对象数组)
获取set方法的时候getMethod("set", parameterTypes),后面传的parameterTypes不就是参数的Class吗,传String class,得到的set方法参数就是String类型嘛。前提是一定要有set(String arg)方法。
为什么不行呢 不知道你想要什么效果
给你另外一种参考 不知道是否适合你的项目
try {
PropertyDescriptor[] props = IntrospectorgetBeanInfo(tgetClass())getPropertyDescriptors();
if (props != null) {
for (int i = 0; i < propslength; i++) {
Systemoutprintln(props[i]getDisplayName());
if(props[i]getDisplayName()equals("deleteFlag")){
props[i]getWriteMethod()invoke(t, true);
}
}
}
} catch (Exception e) {
eprintStackTrace();
}
post 请求获取body内容
注意:>
今天在程序开发中想利用反射技术动态执行类的方法,开始一些方法的动态执行都没什么问题。可程序中有些重载方法需要传入ref或者out参数类型,此时发现反射方法能正确执行,可执行的结果确不能在ref或out的参数中体现,参数的值还是方法动态执行
request肯定会传过来一个方法名,假定叫methodName,你的servlet类假定叫MyServlet,然后执行
try {
Method method = MyServletclassgetDeclaredMethod(methodName,方法参数类型);
Object value = methodinvoke(new MyServlet(), 参数);
} catch (SecurityException e) {
// TODO 自动生成 catch 块
eprintStackTrace();
} catch (NoSuchMethodException e) {
// TODO 自动生成 catch 块
eprintStackTrace();
} catch (IllegalArgumentException e) {
// TODO 自动生成 catch 块
eprintStackTrace();
} catch (IllegalAccessException e) {
// TODO 自动生成 catch 块
eprintStackTrace();
} catch (InvocationTargetException e) {
// TODO 自动生成 catch 块
eprintStackTrace();
}
你的参数最好用Integer类型,这样上面的参数类型改为Integerclass,参数改为你的参数id,参数如果是request传过来的先转换为整型
调用哪个方法是你request传过来的方法名决定的
比如你调用的方法为update(Integer id,String name){}那么request中传来的方法名为update,
Method method =MyServletclassgetDeclaredMethod(methodName,Integerclass,Stringclass);
Object value = methodinvoke(new MyServlet(), 1,"aaa");
以上就是关于java反射获得方法名后怎样判断方法是否含有参数全部的内容,包括:java反射获得方法名后怎样判断方法是否含有参数、java取不同方法参数类型并相应传入对应类型参数、反射getMethod 传入的参数类型 不确定等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)