gpt4 book ai didi

Java 解包参数列表

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:20:04 29 4
gpt4 key购买 nike

这是另一个问题“我将如何在 Java 中执行此操作?”在 Python 中,我可以使用“*”符号来解压参数,如下所示:

>>> range(3, 6)             # normal call with separate arguments
[3, 4, 5]
>>> args = [3, 6]
>>> range(*args) # call with arguments unpacked from a list
[3, 4, 5]

Java 支持使用 ...args 语法获取 args 列表,但是有没有办法(也许使用 Reflection 库?)为其他函数解压这些参数?

最佳答案

public void printStrings(String... strings)
{
// the strings parameter is really a String[].
// You could do anything to it that you normally
// do with an array.
for(String s : strings){
System.out.println(s);
}
}

可以这样调用:

String[] stringArray = new String[10];
for(int i=0; i < stringArray.length; i++){
stringArray[i] = "String number " + (i+1);
}

printStrings(stringArray);

... 语法实际上是数组的语法糖。

Java 没有您描述的功能,但您可以通过多种方式伪造它。

我认为最接近的近似意味着使用可变参数重载您想要以这种方式使用的任何函数。

如果你有一些方法:

public void foo(int a, String b, Widget c) { ... }

你可以重载它:

public void foo(Object... args) {
foo((Integer)args[0], (String)args[1], (Widget)args[2]);
}

但这确实很笨拙且容易出错且难以维护。

更一般地说,您可以使用反射来调用使用任何参数的任何方法,但它也有很多陷阱。这是一个有问题的、不完整的例子,说明它如何很快变得丑陋:

public void call(Object targetInstance, String methodName, Object... args) {
Class<?>[] pTypes = new Class<?>[args.length];
for(int i=0; i < args.length; i++) {
pTypes[i] = args[i].getClass();
}
Method targetMethod = targetInstance.getClass()
.getMethod(methodName, pTypes);
targetMethod.invoke(targetInstance, args);
}

关于Java 解包参数列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6062618/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com