gpt4 book ai didi

java - 将参数作为要调用的对象传递

转载 作者:行者123 更新时间:2023-12-01 14:10:13 24 4
gpt4 key购买 nike

    String className = "com.endpoints.EndPointImpl"; 
String methodName = "add";
String args = "2,3";


try {

Class<?> clas = Class.forName(className);
Object obj = Class.forName(className).newInstance();
java.lang.reflect.Method method = null;
//Type[] types;

for(java.lang.reflect.Method m :obj.getClass().getMethods())
{
if(m.getName().equals(methodName))
{
method = m;
//types = m.getParameterTypes();
break;
}
}

//java.lang.reflect.Method method = clas.getDeclaredMethod(methodName,t);


Object[] strarr = args.split(",");

Object retobj = method.invoke(obj,strarr );

如何传递参数来调用,到目前为止它正在生成异常,我知道为什么,但如何传递两个 int

添加(输入,整数)

附注

ArrayList<Object> objArr = new ArrayList<Object>();

for(java.lang.reflect.Method m :obj.getClass().getMethods())
{
if(m.getName().equals(methodName))
{
method = m;

int index = 0;
for(Type type :m.getGenericParameterTypes())
{
if(type.getClass().equals("Integer"))
{
objArr.add(Integer.parseInt(strarr[index]));
}
else if(type.getClass().equals("Float"))
{
objArr.add(Float.parseFloat(strarr[index]));
}
index++;
}

然后在invoke中传递objArr或者有更好的解决方案,我还想问是否可以创建一个通用转换函数,以便它将字符串转换为指定类型

最佳答案

在编写代码时,您应该始终问自己应该做什么。回答这个问题的最佳方法是阅读 Javadoc。另外,当出现异常时,请始终提供完整的堆栈跟踪。您不需要整个 for 循环。

使用Method#getDeclaredMethod(String, Class[]) 。它接受两个参数

name - the name of the method
parameterTypes - the parameter array

如果该方法名为 add 并接受两个 int 参数,请像这样调用它

java.lang.reflect.Method method = clas.getDeclaredMethod("add", int.class, int.class);

int.class 参数是该方法采用的参数类型。

您可以invoke该方法与

method.invoke(object, 3, 3);

其中 object 是声明 add(int, int) 方法的类的实例。如果此方法是静态,您可以传递null。两个 3 是您将传递的 int 参数值,就像直接调用该方法一样。

object.add(3,3);

如果您接收字符串作为参数传入,则需要先对它们进行强制转换

String args = "2,3";
String[] strarr = args.split(",");
// with no other validation
int[] values = new int[strarr.length];
for (int i = 0; i < strarr.length; i++) {
values[i] = Integer.parseInt(strarr[i]);
}

method.invoke(object, values);

显然,在拆分和解析字符串时执行适当的验证。

关于java - 将参数作为要调用的对象传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18571198/

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