[英]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.