我现在项目很多地方要用到反射,我想问下大家
我通过反射调用一个对象的方法,而这个方法里面有异常要处理
我用反射调用用就抓不到啦,只能够抓到 InvocationTargetException异常而被我反射调用的方法里的异常信息很重要,涉及到金融交易一些报错的信息,我必须要抓到,可是我现在用啦反射 无论怎样也没法子抓到啦大家帮我想想 办法啊,跪求大家解决,要不然,做出来这个项目可要失业啦!!!给100分悬赏!!!!!
我通过反射调用一个对象的方法,而这个方法里面有异常要处理
我用反射调用用就抓不到啦,只能够抓到 InvocationTargetException异常而被我反射调用的方法里的异常信息很重要,涉及到金融交易一些报错的信息,我必须要抓到,可是我现在用啦反射 无论怎样也没法子抓到啦大家帮我想想 办法啊,跪求大家解决,要不然,做出来这个项目可要失业啦!!!给100分悬赏!!!!!
.getTargetException();
if (targetEx != null)
{
msg = targetEx.getMessage();
}本篇文章来源于 IT中国 转载请以链接形式注明出处 网址:http://www.it86.cc/java/2008/0410/28100.shtml估计你是要这个Message
//...
}catch(InvocationTargetException ite){
Exception e=ite;
throw e;
}这样不行吗?
public static void main(String args[]) throws ErrorExcp {
test temp=new test(); //我在test函数里故意抛出来一个 ErrorMacket 异常,它的基类是ErrorExcp
try {
reflectCall(temp,"errorDo",null,null);//自定义反射函数
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (InvocationTargetException e) {
Throwable targetEx = e.getTargetException();
try {
throw targetEx;
} catch (Throwable e1) {
// TODO Auto-generated catch block
System.out.print((ErrorMacket)(e1));
System.out.println(e1.getClass().getName());//测试了下是预期的错误类型
ErrorExcp error= ErrorExcp.class.cast(e1);
//这里还有点疑问不确定什么错误类型
//ErrorMacket是ErrorExcp 的子类,最后抓取的时候情况我感觉有下面几种情况
1.如果我 先catch ErrorMacket 在catch ErrorMacket 是不是会被抓到2次?
2.我直接catch 一个ErrorMacket 类型,最后来个类型判断,判断什么
类型就转什么类型
throw error; }
}
}
}
test temp=new test();
try {
reflectCall(temp,"errorDo",null,null);
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
catch (InvocationTargetException e) {
System.out.println(e);
Throwable targetEx = e.getTargetException();
try {
throw (ErrorExcp)targetEx;
}
catch (ErrorMacket e2) {
System.out.print("在匹配的子类中捕捉到");
}
catch (ErrorExcp e3)
{
System.out.println("在基类中被抓到啦");
}
catch (Throwable e1) {
System.out.print((ErrorMacket)(e1));
System.out.println(e1.getClass().getName());
ErrorExcp error= ErrorExcp.class.cast(e1);
// throw error; } }
}
}结果:10000110101nullnull //这个是错误对象的序列化
java.lang.reflect.InvocationTargetException
在匹配的子类中捕捉到
我不是new 我是反射调用函数和方法,经常用到的对象的Class 信息我都静态保存!