繁体   English   中英

Setter,getter方法的反映

[英]Reflection of setter, getter method

我正在尝试在Java中实现反射代码。 我是使用反射的新手,并且有一个像这样的现有方法:

ScheduleParams incomeResetFXSchedule = performanceSwapLeg.getIncomeFxResetSchedule();
    if (performanceSwapLeg.getIncomeFxResetSchedule().getDateRoll() != null) {
        incomeResetFXSchedule.setDateRoll(DateRoll.valueOf(performanceSwapLeg.getIncomeFxResetSchedule().getDateRoll().toString()));
    } else {
        incomeResetFXSchedule.setDateRoll(DateRoll.valueOf(DateRoll.S_PRECEDING));
    }

我试图为上述代码编写反射代码,但现在我陷入了困境:

 try {
        Class<ScheduleParams> incomeFXResetSchedule = ScheduleParams.class;
        Class<DateRoll> dateRoll = DateRoll.class;
        try {
            Method m = PerformanceSwapLeg.class.getMethod("getIncomeFxResetSchedule");
            m.invoke(performanceSwapLeg);
            Method m1 = ScheduleParams.class.getMethod("setDateRoll", dateRoll);
            m1.invoke(performanceSwapLeg);
        } catch (Exception e) {
            Log.error(CommonConstants.ERROR_LOG, "Failed to invoke the method" + e.getMessage());
        }
    } catch (Exception e) {
   //Do Nothing
    }

但是我不确定如何调用setter方法和getter方法。 关于如何使用反射调用这种方法的任何建议。

您已经在打电话给他们! 但是只是错误的方式。 当您执行m.invoke您正在调用该方法,但您可以像下面的代码行那样进行操作:

getIncomeFxResetSchedule();

如果您看那条线,您会怎么想? 嗯,我想我错过了保存值的变量! Method.Invoke返回一个Object,因此您需要将其Method.Invoke为您的类。 我猜你的班级是ScheduleParams

ScheduleParams scheduleParams = (ScheduleParams) m.invoke(performanceSwapLeg);

好,太棒了。 现在我要设置它。 再一次,您要调用一个接收参数而不传递任何参数的方法:

Method m1 = ScheduleParams.class.getMethod("setDateRoll", dateRoll);
m1.invoke(performanceSwapLeg);

就像下面这样:

setDateRoll();

那可能是抛出一个

java.lang.IllegalArgumentException: wrong number of arguments

因为您没有所谓的不带参数的方法(我希望如此),所以正确的方法应该是:

 Method m1 = ScheduleParams.class.getMethod("setDateRoll", dateRoll);
 m1.invoke(performanceSwapLeg, new DateRoll());

之后,您可以再次调用getter,您将获得一个全新的对象。

我建议您阅读以下相关问题:

以及有关反射API的Oracle文档。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM