如何在Java中展开参数?
下面这段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中通过定义一个辅助方法来解决这个问题,这个辅助方法接收一个包含所有参数的单一对象,然后在调用真正的方法时把这些参数展开。
希望这对你有帮助!