Java 反射静态方法参数字符串

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);

我想使用反射调用方法initdata,我尝试编写类似的代码,但它不起作用:

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