调用反射方法时参数数量未知

Felipe Hogrefe Bento:

我正在创建一个GUI,该GUI根据选定的图像特征显示按钮。假设图像A具有特征1、2和3,因此将为特征1、2和3实现过滤器的选定按钮添加到面板中。

我希望过滤器是可以轻松添加到代码中的方法,所以我使用反射来处理特征,以便为每个图像获取Corret方法。

将按钮添加到GUI时,它需要一个动作侦听器,并在动作侦听器中调用其方法。

如果有用于过滤方法的参数,则也将一组文本字段添加到GUI,以便可以收集参数。

如果该方法没有参数,则调用可以正常工作,添加文本字段以及通过这些TF捕获参数也可以。

问题是:使用未知大小的列表是否可以将此列表用作反射调用的参数?

图像1显示了没有选择图像的GUI,选择图像后,添加了按钮,GUI看起来像2

未选择img 图已选择,已添加按钮

public class Filters(){
    @Name("Decompose")  
    public void decompose() {
        ...decompose the image
    }

    @Name("Weighted Blur")
    public void blurImage(@ParamName("Weight") int weight, @ParamName("Radius") int radius) {
        ...blur the image
    }
}

public class Control(){
    public void addFilterFunctions(ArrayList<Method> applicableMethods) {
        for(Method m : applicableMethods) {
            addButton(m);
        }
    }   
}


public void addButton(Method m) {       
    JButton newButton = new JButton(m.getAnnotation(Name.class).value());
    newButton.addActionListener(genericListener(m, newButton, methodFields));
}

private ActionListener genericListener(Method m, JButton b, ArrayList<JTextField> methodFields) {
    return listener ->{
        try {           
            int[] params = new int[methodFields.size()];
            for(int i =0; i<methodFields.size();i++) {
                params[i] = Integer.parseInt(methodFields.get(i).getText());
            }   

            m.invoke(filters, params);
        } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    };
}

如您所见,我正在从添加到JPanel的textField中收集参数,并从中创建一个int []。

但是似乎invoke方法将Object ... objs作为参数,据我的理解是一个列表,但是我收到“ java.lang.IllegalArgumentException:错误的参数数量”错误。

奥斯卡·洛佩斯(OscarLópez):

an Object...实际上与相同Object[],因此您需要传递an Object[]才能成功:

Object[] params = new Object[methodFields.size()];
for (int i = 0; i < methodFields.size(); i++) {
    params[i] = Integer.parseInt(methodFields.get(i).getText());
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

调用一些参数数量未知的方法

参数数量未知的调用函数

调用参数数量未知的函数Python

调用参数数量未知的回调

当输入参数数量未知时,使用可变数量的输入参数进行函数调用

调用“||”时的参数数量或类型错误

为什么调用调用方法(JAVA)时出现“参数数量错误”异常

调用映射 getter 时 Solidity 函数的参数数量无效

调用方法时参数数目错误

获取传递给具有未知数量参数的方法的参数数量

调用方法时如何传递参数(反射)?

为什么我得到Java.lang.IllegalArgumentException:使用反射使用varargs调用方法时参数数目错误

参数数量未知的Lambda类型

JavaBean setter方法调用错误“参数数量错误”

根据参数数量调用mixin基类的构造方法

C#当参数数量相等时,如何使用System.Reflection调用私有重载方法

如何使arg中的参数数量未知的PDO类方法用于插入/更新/删除

调用CMake函数:参数数量

更改参数数量的Java函数调用

当参数为Object []类型时,通过反射调用方法

绑定键时参数数量错误

如何在javascript中创建参数数量未知的对象?

如何创建一个参数数量未知的函数?

Pybind11 - 参数数量未知的函数

比较 PLSQL 中的日期时,“调用‘>’的参数数量或类型错误”

动态参数反射调用方法

调用参数数目未知的可变参数函数

确定方法接受的参数数量

获取类方法的参数数量