java - 如何转发参数列表

标签 java parameter-passing variadic-functions

我已经声明了一个接口(interface)Listable、一个包含ListableNode以及一个包含节点的SinglyLinkedListSinglyLinkedList 包含一个 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/

相关文章:

c++ - 通过引用传递 wchar 数组

Haskell:如何使用单子(monad)上下文编写带有参数的单子(monad)可变参数函数

c# - 可以在 C# 中使用带有非默认构造函数的单例吗?

c++ - 具有可变构造函数的类模板;将参数存储到 std::vector< std::shared_ptr<>>

c++模板化类,带有指向可变函数的函数指针

java - 如何在 MAC OS 上的 LibGDX 中以编程方式调用未修饰窗口中窗口的最大化图标

java - 在 Android Studio 中动态设置按钮的约束

java - 在 Java 中同时发出 Web 请求

java - 使用计时器增加 JTextField 中的值

javascript - 检测传递的参数是否为数组? Javascript