【发布时间】:2018-07-30 13:46:20
【问题描述】:
我想从传递的几个值中动态调用几个“setter”方法。 每个方法都会有 String, int... 类型的变量来设置(例如:setUserName(String userName) 或 setUserAge(int age))。
就我而言,我有一个 setter 方法“setUse_status(int use_status)”,但我无法配置 getDeclaredMethod 方法来工作。 似乎在获取方法时,classVariableName 设置为字符串(很明显,因为我将该变量作为变量的名称 [字符串] 传递)。
我正在研究如何获取变量类型并在 getDeclaredMethod 调用中设置它。
所以,我有这个代码:
private void getValueFromColumn(Object paramsClass, String classVariableName, Object dataBaseValue) {
//First create the string with the method name
String methodName = "set" + classVariableName.substring(0, 1).toUpperCase().toString() +
classVariableName.substring(1);
Method loadParamsMethod;
try {
loadParamsMethod = paramsClass.getClass().getDeclaredMethod(methodName, classVariableName.getClass());
try {
loadParamsMethod.invoke(paramsClass, dataBaseValue);
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
e.printStackTrace();
}
} catch (NoSuchMethodException | SecurityException e) {
e.printStackTrace();
}
}
还有错误:
java.lang.NoSuchMethodException: com.sener.dbgui.model.params.CommonParameters.setUse_status(java.lang.String)
at java.base/java.lang.Class.getDeclaredMethod(Class.java:2432)
at com.sener.dbgui.utils.ParamsClassUtils.getValueFromColumn(ParamsClassUtils.java:72)
at com.sener.dbgui.utils.ParamsClassUtils.retrieveParamsData(ParamsClassUtils.java:107)
at com.sener.dbgui.utils.ParamsClassUtils.loadAllParameters(ParamsClassUtils.java:39)
at com.sener.dbgui.controller.ComponentController.retrieveParamsFromDB(ComponentController.java:506)
at com.sener.dbgui.controller.ComponentController.access$18(ComponentController.java:494)
at com.sener.dbgui.controller.ComponentController$4.run(ComponentController.java:294)
at java.base/java.lang.Thread.run(Thread.java:844)
【问题讨论】:
-
你能给
classVariableName举个例子吗?在您的示例中是“int”还是“use_status”? -
好的,我已经看到了这个可能的解决方案link
-
classVariableName.getClass()将返回String- 应该很明显。你的意思是dataBaseValue.getClass()吗?在这种情况下,请注意int不是一个类,即当您将整数作为dataBaseValue传递时,您将获得一个包装类,例如如果Integer和getDeclaredMethod(name, Integer.class)接受int参数,则不会找到该方法。 -
是的,在我的例子中是 use_status
-
但是,我有变量名和类,有没有办法找到setter方法的变量类型?从我的完全无知来看,这应该很简单......
标签: java variables variable-types