Java:将 int[3] 传递给需要 3 个 int 的函数

标签 java arrays

从我使用 Perl 的日子开始,我希望能够编写这样的代码,给出定义 Color.rgb(int,int,int) :

int[] myColorData = {127, 42, 251};
Color myColor = Color.rgb(myColorData);

有没有办法在Java中做类似的事情?我试图避免必须指定 [0][1][2] 和变量名称 3 次的冗长因为它对读者没有任何帮助。

请注意,这只是一个简单的示例;我对更通用的解决方案感兴趣,而不仅仅是如何调用 Color.rgb()。我知道类型 int[] 与类型 int 不同,但我想知道是否有办法将数组分解为 int >,或者是否有其他调用方法可以执行类似的操作?

最佳答案

如果您坚持只想提及变量 myColorData 一次(而不是 3 次),那么您可以通过反射来实现 - 但它非常丑陋:

import javafx.scene.paint.Color;
try {
    // Setup code
    Method m = Color.class.getMethod("rgb", int.class, int.class, int.class);

    // Your code
    Object[] myColorData = {127, 42, 251};
    Color myColor = (Color)m.invoke(null, myColorData);  // Invoke static method with an array of arguments

    // Confirmation
    System.out.println(myColor);

    // OMG this hurts
} catch (IllegalAccessException|IllegalArgumentException|InvocationTargetException|NoSuchMethodException|SecurityException e) {}

鉴于此,如果您发现自己经常使用此模式,那么最好编写一个不使用反射的辅助方法:

static Color rgbColor(int[] rgb) {
    return Color.rgb(rgb[0], rgb[1], rgb[2]);
}
<小时/>

顺便说一句,您想要在 Python 和 JavaScript 中做的事情很容易(假设存在等效的库):

# Python
myColorData = [127, 42, 251]
myColor = Color.rgb(*myColorData)

// JavaScript
var myColorData = [127, 42, 251];
var myColor = Color.rgb.apply(null, myColorData);

与静态类型编译语言不同,脚本语言通常可以轻松地使用数组动态调用函数。

关于Java:将 int[3] 传递给需要 3 个 int 的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35875885/

相关文章:

java - 无法从java程序连接到远程hbase

c - 如何将 scanf() 数据插入到链表数组中?

java - 最小堆 java 实现 arraylist 与 array

arrays - 如果数组被展平,我如何知道多维数组中项目的索引是什么?

java - 如何查找输入到扫描仪的字符串是否在数组中?

c# - 字节分配不一致

java - Eclipse SWT 在 MacOs X High Sierra 的设计页面上显示颠倒的 shell

java - 非法 block 大小异常 : last block incomplete in decryption in android

java - 如何在 javafx 中定位窗口阶段?

java - ListView onClick 出现问题