如何在Java中展开参数?

6 投票
6 回答
4229 浏览
提问于 2025-04-17 13:07

下面这段Python代码正好实现了我想要的功能:

def function(a, b, c):
    print("%i :: %s :: %f" % (a,b,c))

a = 1
b = "abc"
c = 1.0

function(a, b, c)

list = [a, b, c]

# This is what I am searching for in Java
function(*(list))

我有一个像列表的结构,但我不知道里面有多少个参数。不过我知道这些参数的数量、类型和格式都是正确的。我想把它们传递给一个方法。所以我需要把这些参数“展开”。有人知道在Java中怎么做吗?

6 个回答

1

你不能这样做。在Java中,方法的参数是在编译时检查的,而数组的内容只有在运行时才会确定,所以这种检查是不可能的。

最接近的解决办法是创建一个接受数组作为参数的方法,然后在这个方法里展开参数,最终调用你想要的方法。

4

你可以使用 Object... 来声明可选参数,这样你就可以传递任意数量的参数,然后把每个参数转换成需要的类型:

public void method1(String p1, Integer p2) {
}

public void method2(Object... params) {
    method1((String)params[0], (Integer)params[1];
}

你可以这样调用 method2

method2("abc", 1);

当然,这个例子有点多余,因为你其实可以直接调用 method1,但这不是我想要说明的重点。:)

5

Java没有这个功能,因为它是一种静态且强类型的语言,通常情况下,一个方法不会接收一堆相同类型的值,这些值可以存放在某个复合对象里(比如数组、列表等)。而Python就没有这个问题,因为它是动态类型的。你可以在Java中通过定义一个辅助方法来解决这个问题,这个辅助方法接收一个包含所有参数的单一对象,然后在调用真正的方法时把这些参数展开。

希望这对你有帮助!

撰写回答