我已经声明了一个接口(interface)Listable
、一个包含Listable
的Node
以及一个包含节点的SinglyLinkedList
。 SinglyLinkedList
包含一个 search()
方法,该方法使用 Listable
中的 matches()
方法。我希望 Listable
尽可能通用,因此 matches()
中的参数数量应该是任意的。
search()
返回一个新的 SinglyLinkedList
,仅包含 this
匹配的元素。
看看下面的实现:
interface Listable {
// ...
boolean matches(Object... matchesArgs);
// ...
}
class Node {
Listable data;
Node next;
}
class SinglyLinkedList {
// ...
public SinglyLinkedList search(Object... searchArgs) {
// ...
somewhere: [someNode].data.matches(searchArgs)
// ...
}
// ...
}
这不起作用,因为 matchesArgs
只有一个元素:数组 searchArgs
。我希望它等于 searchArgs
,而不是 [searchArgs]
。
我不想在 matches()
的实现中解压数组,因为每当您使用 matches()
时,这都需要传递一个参数数组,并且它还会尝试在未创建的地方处理问题。
在我看来,问题在于 searchArgs
在转发到 matches()
时被打包到另一个数组中。我不想传递这个数组,而是想将其元素作为参数传递。
有没有办法在Java中做到这一点?
最佳答案
我不确定将 searchArgs
作为参数传递给 matches
会导致该参数被另一个数组包装。采取这个示例代码:
import java.util.Arrays;
public class HelloWorld {
public static void main(String[] args) {
doThat(1, 2, 3, 4, 5);
}
public static void doThat(Object... varargs) {
doThis(varargs);
}
public static void doThis(Object... varargs) {
System.out.println(Arrays.toString(varargs));
}
}
输出是预期的[1, 2, 3, 4, 5]
。
关于java - 如何转发参数列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47510620/