Это не ошибка.
Это информация о том, что переменная foo
теперь содержит объект класса FooBar
, внутреннее имя которого __lldb_expr_12.FooBar
. __lldb_expr_12
- это имя модуля Swift на игровой площадке в этом случае.
Метод принимает 3 аргумента, но вы вызываете метод только с 1 аргументом. Вы должны собрать все значения параметров, а затем вызвать метод.
Вот пример кода.
public static Object getBean(String beanClassName) throws Exception {
Class klass = Class.forName(beanClassName); // ->Get Class Name By Path
Object obj = klass.newInstance(); // ->Create The Object of Class
Method[] b = klass.getDeclaredMethods(); // ->Get Declared Method in
// Class
for (Method m : b) {
Type[] pType = m.getGenericParameterTypes();
if(pType.length==0){
continue;
}
/**
* Create new array to hold value of parameters
*/
Object[] params = new Object[pType.length];
for (int i = 0; i < pType.length; i++) {
System.out.println("The Arguments :" + pType[i] + " Arguments Order :" + i);
if (pType[i].equals(String.class)) {
params[i] = "Hello";
} else if (pType[i].equals(int.class)) {
params[i] = 21;
}
}
m.setAccessible(true);
/**
* Invoke method with all paramtters.
*/
m.invoke(obj, params);
}
return obj;
}
У вас есть setter
для name1
, который принимает 3
строки в качестве параметров, но в вашем методе getBean
вы вызываете его динмически, используя m.invoke(obj,"Hello");
, это означает, что вы пытаетесь вызвать метод с именем setName1
только с одним параметром, и этот метод не существует.
В целях объяснения я отредактировал его до m.invoke(obj, "Hello","Hello","Hello");
, и он работает.
То же самое относится к setAge1
: m.invoke(obj, 21,21);
Цель состоит в том, чтобы вы предоставили методу invoke
как можно больше объектов, чем количество имеющихся у вас параметров заявлено в методе