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;
}
}
我想使用反射调用方法initdata,我试着写这样的东西,但它不起作用:
Class c = Class.forName("com.cubiware.fyretv.application.model.Star");
par[0] = String.class;
Method mthd = c.getMethod("initdata", par);
ArrayList output = (ArrayList) mthd.invoke(null, null);
答案 0 :(得分:2)
试
ArrayList output = (ArrayList) mthd.invoke(null, (String)null);
当方法需要Object ...
时,传递null并不是一个好主意可能会有所帮助
答案 1 :(得分:0)
首先,您的支票对我来说似乎很奇怪:尝试if (pattern != null)
代替if (pattern != "")
。
为什么不传递par
数组,我认为你有非法参数例外。尝试传递参数数组。
Object[] args = {"someString / maybe null"};
ArrayList output = (ArrayList) mthd.invoke(null, args);
答案 2 :(得分:0)
显然,您的调用呼叫与
类似initdata(null);
现在,在initdata
内,您不会过滤pattern == null
引导我们进行通话的情况
Star.find(null, 0);
我们不知道这种方法的实现 - 如果我们很幸运,我们会得到一个空集合。否则,我希望在NullPointerException
或Star.find
mc.iterator()
{{1}}
答案 3 :(得分: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