Java 反射静态方法参数字符串
我想使用反射调用方法initdata,我尝试编写类似的代码,但它不起作用:Java 反射静态方法参数字符串,java,reflection,Java,Reflection,我想使用反射调用方法initdata,我尝试编写类似的代码,但它不起作用: public class Star{ public static ArrayList initdata(String pattern) { ArrayList data = new ArrayList(); if (pattern != "") { ModelCollection mc = Star.find(pattern, 0);
public class Star{
public static ArrayList initdata(String pattern) {
ArrayList data = new ArrayList();
if (pattern != "") {
ModelCollection mc = Star.find(pattern, 0);
Iterator dataIterator = mc.iterator();
while (dataIterator.hasNext()) {
Star star = (Star) dataIterator.next();
data.add(star.getName());
Debug.trace("StarName" + star.getName());
}
}
Collections.sort(data);
return data;
}
}
试一试
当方法需要对象时,传递null不是个好主意
也许这会有帮助
首先,我觉得您的检查很奇怪:尝试
如果(模式!=null)
而不是如果(模式!=“”)
为什么不传递par
数组呢,我想你有非法的参数异常。尝试传递参数数组
ArrayList output = (ArrayList) mthd.invoke(null, (String)null);
显然,您的调用与
Object[] args = {"someString / maybe null"};
ArrayList output = (ArrayList) mthd.invoke(null, args);
现在,在initdata
中,您不过滤导致调用的pattern==null
情况
initdata(null);
我们不知道这个方法的实现——如果幸运的话,我们会得到一个空集合。否则,我希望在
Star.find
中或稍后在mc.iterator()
中出现NullPointerException
什么不起作用?发布错误消息或描述发生的情况。par
array的大小是多少?
initdata(null);
Star.find(null, 0);
$ javac -cp dp4j-1.2-SNAPSHOT-jar-with-dependencies.jar -Averbose -All Star.java
Star.java:12:
import com.dp4j.*;
public class Star {
public Star() {
super();
}
public static ArrayList initdata(String pattern) {
return null;
}
@Reflect()
public static void main(String[] args) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.NoSuchMethodException, java.lang.reflect.InvocationTargetException, java.lang.IllegalArgumentException {
final java.lang.reflect.Method initdataWithStringMethod = Class.forName("Star").getDeclaredMethod("initdata", .java.lang.String.class);
initdataWithStringMethod.setAccessible(true);
initdataWithStringMethod.invoke("", new .java.lang.Object[1][]{null});
final java.lang.reflect.Method printlnWithStringMethod = Class.forName("java.io.PrintStream").getDeclaredMethod("println", .java.lang.String.class);
printlnWithStringMethod.setAccessible(true);
printlnWithStringMethod.invoke(System.out, new .java.lang.Object[1][]{"Varargs + reflection? No problem"});
}
}
public static void main(String args[]) {
^
$ java Star
Varargs + reflection? No problem