java反映method.invoke不起作用

时间:2018-01-15 14:32:03

标签: java reflection

我尝试使用Method调用函数。问题是下面的代码没有执行。我试着搜索,结果一样。有人可以说明为什么它不起作用吗?我曾尝试过一些日志,直到method.invoke函数都达到了。以下代码没有抛出异常。

public String customSearchedParams() throws Exception
    {
            Class<?> dynamicObj = Class.forName(this.className);
            Constructor<?> constructor = dynamicObj.getConstructor(long.class, long.class, long.class, long.class);
            Object obj = constructor.newInstance(this.startTime, this.time, this.t1, this.t2);                
            Method method = dynamicObj.getMethod("getCustomSearch", new Class[]{long.class, long.class, long.class, long.class, long.class});
            this.data = (String) method.invoke(obj, new Object[]{this.startTime, this.time, this.t1, this.t2, this.paramIDs});
            return "SUCCESS";
    }

构造

public Traffic(long startTime, long endTime, long t1, long t2){
     // Assign to local variables
}

getCustomSearch:

public String getCustomSearch(long startTime, long endTime, long t1, long t2, long paramIDs) throws Exception {
   // do DB calls --> return JSONArray as String
}

2 个答案:

答案 0 :(得分:2)

Class.getMethod()收到一个可变长度的参数。您应该将类​​作为单独的参数传递,而不是转换为数组。与invoke()

相同
        Method method = dynamicObj.getMethod("getCustomSearch", long.class, long.class, long.class, long.class, long.class);
        this.data = (String) method.invoke(obj, this.startTime, this.time, this.t1, this.t2, this.paramIDs);

答案 1 :(得分:0)

感谢所有帮助过我的人。我发布的代码正在运行,我已经将paramID声明为String并且我试图传递它的时间很长。这就是为什么method.invoke没有执行。