Java 基于该值动态设置setter

Java 基于该值动态设置setter,java,Java,我正在查询数据库并获得结果集。当我处理结果集时,我必须将值设置为相应的setter。 对于一个特定的列,我将得到1、2、3、4、5等值,直到20 如果值为1,我必须将其分配给setValue1() 如果值是2,那么我必须将其分配给setValue2(),依此类推,直到setValue20() 示例: if(dbObject.getValue()==1) { userObject.setfoo1(dbObject.getValue()); } if(dbObject.getValue()==2)

我正在查询数据库并获得结果集。当我处理结果集时,我必须将值设置为相应的setter。 对于一个特定的列,我将得到1、2、3、4、5等值,直到20

如果值为1,我必须将其分配给setValue1() 如果值是2,那么我必须将其分配给setValue2(),依此类推,直到setValue20()

示例:

if(dbObject.getValue()==1) {
userObject.setfoo1(dbObject.getValue());
}
if(dbObject.getValue()==2) {
userObject.setfoo2(dbObject.getValue());
}
.
.
if(dbObject.getValue()==20) {
userObject.setfoo20(dbObject.getValue());
}
我的目标是编写1个块来实现此功能,而不是我目前拥有的20个块


提前感谢。

您需要使用反射来实现这一点。尝试将以下函数添加到将调用setValueNN()方法的类中(实际上任何*.java文件都可以使用)

然后可以使用此方法对象调用所需的方法:

Method mtd = getSetterMethod(3); // will give you ''setValue3(String str)''
mtd.invoke(methodParameter); // method parameter is what you want to set if you would have call your ''setValueN(methodParameter)'' method directly.

我希望这会有所帮助。

使用反射可以做到这一点。以下是一个例子:

class SampleResultSet{
    public void setfoo1(int i){
        System.out.println(String.format("Invoked with %s", i));
    }
    public void setfoo2(int i){
        System.out.println(String.format("Invoked with %s", i));
    }
}

class Main {

    public static void main(String[] args)
    {
        SampleResultSet s = new SampleResultSet();
        int[] dbObjects = new int[]{1, 2};
        Method[] methods
                = SampleResultSet.class.getMethods();
        String methodNameTmpl = "setfoo%s";
        for (int dbObject : dbObjects) {
            try {
                Method fooMethod = SampleResultSet.class.getMethod(String.format(methodNameTmpl, dbObject), int.class);
                fooMethod.invoke(s, dbObject);
            } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
                e.printStackTrace();
            }
        }

    }
}

您需要向示例代码展示一些代码,以便更好地解释您试图执行的操作。谢谢这是大喊着要用数组来实现的。创建大量的方法不是一个好方法,也不是一个可扩展的方法。当你必须添加项目21时会发生什么?这是一个好问题,但在我的情况下,它将始终是20。它永远不会超过20.考虑使用
class SampleResultSet{
    public void setfoo1(int i){
        System.out.println(String.format("Invoked with %s", i));
    }
    public void setfoo2(int i){
        System.out.println(String.format("Invoked with %s", i));
    }
}

class Main {

    public static void main(String[] args)
    {
        SampleResultSet s = new SampleResultSet();
        int[] dbObjects = new int[]{1, 2};
        Method[] methods
                = SampleResultSet.class.getMethods();
        String methodNameTmpl = "setfoo%s";
        for (int dbObject : dbObjects) {
            try {
                Method fooMethod = SampleResultSet.class.getMethod(String.format(methodNameTmpl, dbObject), int.class);
                fooMethod.invoke(s, dbObject);
            } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
                e.printStackTrace();
            }
        }

    }
}