gpt4 book ai didi

java - 动态调用方法

转载 作者:行者123 更新时间:2023-11-30 04:28:30 25 4
gpt4 key购买 nike

我在这里需要一点帮助,请告诉我您是否知道如何解决我的问题。

假设我有这门课:

public testClass{

public int example1(){
return 2;
}
public int example2(){
return 0;
}
public int example3(){
return 456;
}
}

我想要一个方法,它能做与此方法相同的事情,但以动态方式

public int methodeSwitch(int a){
if (a==1){return method1;}
if (a==2){return method2;}
if (a==3){return method3;}
return null;
}

我的问题是,我有一个包含 50 多个字段的巨大类 (dto),因此我想根据我当前使用的字段(所以是的,动态地)使用 getter 和 setter。我知道如何访问字段(使用 java.lang.Field、wouuu),但我不知道如何通过名称转换方法(将动态创建)。

只要给我一个提示就太棒了!

谢谢法比安

编辑:为了澄清,我必须编写一个基本上使用我的类的每个 setter 的方法,所以如果我可以使用类似的东西

useMethod("set"+fields[i]+"();");

这会很有帮助,并且可以防止我编写几十行代码。

再次感谢各位的帮助! ;)

最佳答案

您需要使用反射从您的类中获取声明的方法。我假设这些方法位于您想要调用 getter/setter 的类中,并且 fields 是字段名称的 String[]

private Object callGet(final String fieldName) throws NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
final Method method = getClass().getDeclaredMethod("get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1));
return method.invoke(this, (Object[]) null);
}

private void callSet(final String fieldName, final Object valueToSet) throws NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
final Method method = getClass().getDeclaredMethod("set" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1), new Class[]{valueToSet.getClass()});
method.invoke(this, new Object[]{valueToSet});
}

您还可以查看Commons BeansUtil这是一个专为执行此操作而设计的库...

关于java - 动态调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15228092/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com