Java 获取动态大小的 Object 数组并将其转换为单个参数

Java take Object array of dynamic size and convert it to individual parameters

提问人:Creepabob 提问时间:1/29/2023 更新时间:1/29/2023 访问量:34

问:

我现在正在过度设计一个照片项目,并试图使使用滤镜将更多图像添加到图像拼贴中变得非常容易。我有一个包含所有图片的 2D 数组,一个包含所有要调用的方法的 2D 数组,以及一个 Objects 的 3D 数组。我使用了一个 3D 对象数组来表示参数,因为每种方法都有不同数量的参数和不同的类型(即 int、color 等)。现在,我能够传递参数,但它的上限为三个,为了增加这个数字,我必须硬编码更多的if语句。我的代码如下:

for (int row = 0; row < pictures.length; row++)
        {
            for (int col = 0; col < pictures[row].length; col++)
            {
                Picture current = pictures[row][col];
                Method m = methods[row][col];
                Object[] p = parameters[row][col];
                
                int numOfParameters = p.length;
                
                if (numOfParameters == 0)
                    m.invoke(current);
                else if (numOfParameters == 1)
                    m.invoke(current, p[0]);
                else if (numOfParameters == 2)
                    m.invoke(current, p[0], p[1]);
                else if (numOfParameters == 3)
                    m.invoke(current, p[0], p[1], p[2]);
                
                canvas.cropAndCopy(current, 0, height, 0, width, height * row, width * col);
            }
        }

有没有可能做这样的事情

m.invoke(currentPicture, unpack(p));

以这样的方式,它等于这个

m.invoke(currentPicture);

m.invoke(currentPicture, param1);

m.invoke(currentPicture, param1, param2);

等取决于阵列的大小 或者让它自动调整到参数数量的东西?

我基本上到处都搜索以找到答案,但我唯一看到的是 varargs,这不是我要找的,我需要一种方法来发送一个参数,但将其“解包”为 n 个参数,其中 n 表示数组的大小

Java 数组参数 传递 反射

评论

0赞 tgdavies 1/29/2023
Invoke 将 Object 数组作为第二个参数。你试过吗?m.invoke(current, p)
0赞 Creepabob 1/29/2023
@tgdavies哦,天哪,非常感谢你,我不知道为什么我没有早点尝试

答: 暂无答案