日期:2014-05-20  浏览次数:20706 次

反射调用setter/getter方法的一个小问题
在看《java开发实战经典》的反射那一章,通过反射调用setter和getter,我自己实验的时候遇到一个问题,怎么把getter的返回值给返回了?
书上的代码是这样的:

public static void setter(Object obj,String att,Object value,Class<?>type){
try{
Method met = obj.getClass().getMethod("set"+initStr(att),type);
met.invoke(obj, value);
}catch(Exception e){
e.printStackTrace();
}
}
public static void getter(Object obj,String att){
try{
Method met = obj.getClass().getMethod("get"+initStr(att));
System.out.println(met.invoke(obj));
}catch(Exception e){
e.printStackTrace();
}
return temp;
}

我想把getter方法改为返回那个返回值,这样写怎么不对啊?

public static Object getter(Object obj,String att){
try{
Method met = obj.getClass().getMethod("get"+initStr(att));
Object temp = met.invoke(obj);
}catch(Exception e){
e.printStackTrace();
}
return temp;
}

invoke方法不是有返回值的吗?
反射?java?

------解决方案--------------------
 
try{
            Method met = obj.getClass().getMethod("get"+initStr(att));
            Object temp = met.invoke(obj);
        }catch(Exception e){
            e.printStackTrace();
        }
        return temp;
改为
 Object temp=null;
try{
            Method met = obj.getClass().getMethod("get"+initStr(att));
            temp = met.invoke(obj);//这里定义是局部变量,return娶不到的。
        }catch(Exception e){
            e.printStackTrace();
        }