gpt4 book ai didi

java - 将方法传递给方法

转载 作者:行者123 更新时间:2023-12-01 16:47:09 25 4
gpt4 key购买 nike

我有一个使用双端队列的方法。在一个地方,有时我想要Deque.pullFirst(),有时Deque.pullLast()。它应该取决于传递给该方法的参数之一。如何使用 Java 8 做到这一点?

这是我对 Callable 的尝试,我知道它不起作用,但现在您可以理解我想要实现的目标:

public class AppMain {
public void iterateThroughQueue(Callable callable) { // error
Deque<Integer> deq = new ArrayDeque<>();

deq.add(1);
deq.add(2);
deq.add(3);

for (int i = 0; i < 3; i++) {
System.out.println(callable.apply(deq)); // error!
}
System.out.println("size after iteration = " + deq.size());
}

public static void main(String[] args) {
AppMain.iterateThroughQueue(Deque::pollFirst); // error!
}
}

最佳答案

方法引用是:

  • Consumer<T> ,这意味着它们接受一个参数并且不返回任何内容。例如System.out::printlnConsumer<String> .
  • Producer<T> ,这意味着它们不带任何参数并返回一些内容。例如UUID::randomUUIDProducer<UUID> .
  • Function<T,Z> ,这意味着它们采用 T 类型的参数(可以是要应用该方法的实例)并返回 Z 类型的结果,在您的情况下为 Deque::pollFirst采取的是Function<Deque<Integer>, Integer> 。另一个例子是 deq::add其中 deq 是 Deque<Integer> 的实例这将是 Function<Integer, Boolean> .

所以你应该使用Function<Deque<Integer>, Integer>而不是 Callable ,它是完全不同的东西。另外iterateThroughQueue(...)需要static .

关于java - 将方法传递给方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48448864/

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