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

JavaBean setter方法调用错误“;错误的参数数量“;,java,reflection,javabeans,Java,Reflection,Javabeans,我正试图设置JavaBean的索引值,但我不能用反射来实现这一点。 你知道为什么会这样吗?如何通过反射调用setter public class Bean1111 { public void setColors(Color[] colors) { this.colors = colors; } public Color [] colors = {Color.RED, Color.green, Color.blue, Color.pink}; pu

我正试图设置JavaBean的索引值,但我不能用反射来实现这一点。 你知道为什么会这样吗?如何通过反射调用setter

public class Bean1111 {
    public void setColors(Color[] colors) {
        this.colors = colors;
    }
    public Color [] colors = {Color.RED, Color.green, Color.blue, Color.pink};

    public static void main(String[] args) throws InvocationTargetException, IllegalAccessException {
        Bean1111 bean = new Bean1111();
        Color[] colors = new Color[]{Color.RED,Color.BLACK};
        bean.getClass().getDeclaredMethods()[0].invoke(bean, colors); //exception  "java.lang.IllegalArgumentException: wrong number of arguments"
    }
}
出于某种原因,若我要编写这段代码,编译器只需将数组内联为多个对象,而不是数组对象

// with the same bean class
 public static void main(String[] args) throws Exception {
        Bean1111 bean = new Bean1111();
        Color[] colors = new Color[]{Color.RED,Color.BLACK, Color.WHITE};
        Expression expr = new Expression(bean, "setColors", colors);
        expr.execute();
        // java.lang.NoSuchMethodException: <unbound>=Bean1111.setColors(Color, Color, Color);
    }
//使用相同的bean类
公共静态void main(字符串[]args)引发异常{
Bean1111 bean=新的Bean1111();
颜色[]颜色=新颜色[]{Color.RED,Color.BLACK,Color.WHITE};
表达式expr=新表达式(bean,“setColors”,colors);
expr.execute();
//java.lang.NoSuchMethodException:=Bean1111.setColor(颜色,颜色,颜色);
}
您应该使用

bean.getClass().getDeclaredMethods()[0].invoke(bean, new Object[] {colors});
或:

由于
invoke
方法使用varargs参数,您可以显式地告知数组是被调用方法的单个参数

将getter方法添加到
Bean1111
类,然后打印结果时:

Arrays.stream(bean.getColors()).forEach(System.out::println);
它给出了输出:

RED
BLACK

尝试检查
bean.getClass().getDeclaredMethods()[0].getName()
。首先,确保您实际调用了setter,而不是main()。第二,将颜色类型更改为Object(或将其强制转换为Object),以确保数组不会被解释为包含两个参数的数组,而是被解释为单个参数@AndrewS我想调用的正是我的方法
RED
BLACK