Java 将方法传递给另一个方法
我有一个使用Deque的方法。在第一个位置,有时我想Java 将方法传递给另一个方法,java,Java,我有一个使用Deque的方法。在第一个位置,有时我想Deque.pullFirst(),有时我想Deque.pullLast()。它应该取决于传递给方法的一个参数。如何使用Java8实现这一点 这是我对Callable的尝试,我知道它不起作用,但现在您可以理解我想要实现的目标: public class AppMain { public void iterateThroughQueue(Callable callable) { // error Deque<Int
Deque.pullFirst()
,有时我想Deque.pullLast()
。它应该取决于传递给方法的一个参数。如何使用Java8实现这一点
这是我对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!
}
}
公共类AppMain{
public void iteratethrowqueue(Callable Callable){//error
Deque deq=新的阵列定义();
deq.add(1);
deq.add(2);
deq.add(3);
对于(int i=0;i<3;i++){
System.out.println(callable.apply(deq));//错误!
}
System.out.println(“迭代后的大小=“+deq.size());
}
公共静态void main(字符串[]args){
AppMain.IterateThrowQueue(Deque::pollFirst);//错误!
}
}
可调用的
在这里不起作用,但函数将起作用
您可以尝试以下方法:
public static void iterateThroughQueue(Function<Deque<Integer>, Integer> function) {
Deque<Integer> deq = new ArrayDeque<>();
deq.add(1);
deq.add(2);
deq.add(3);
for (int i = 0; i < 3; i++) {
System.out.println(function.apply(deq));
}
System.out.println("size after iteration = " + deq.size());
}
public static void main(String[] args) {
iterateThroughQueue(Deque::pollFirst);
}
Callable
在这里不起作用,但是Function
会起作用
您可以尝试以下方法:
public static void iterateThroughQueue(Function<Deque<Integer>, Integer> function) {
Deque<Integer> deq = new ArrayDeque<>();
deq.add(1);
deq.add(2);
deq.add(3);
for (int i = 0; i < 3; i++) {
System.out.println(function.apply(deq));
}
System.out.println("size after iteration = " + deq.size());
}
public static void main(String[] args) {
iterateThroughQueue(Deque::pollFirst);
}
方法引用为:
消费者
,这意味着他们接受一个参数而不返回任何内容。例如,System.out::println
是一个消费者
Producer
,这意味着它们不接受任何参数并返回某些内容。例如,UUID::randomUUID
是一个生产者
Function
,这意味着它们接受类型为T的参数(可以是应用该方法的实例)并返回类型为Z的结果,在您的示例中,Deque::pollFirst
take是一个函数
。另一个例子是deq::add
,其中deq是Deque
的一个实例,它将是一个函数
因此,您应该使用函数
而不是Callable,因为Callable用于完全不同的东西。另外,iteratethrowqueue(…)
需要是静态的
方法引用是:
消费者
,这意味着他们接受一个参数而不返回任何内容。例如,System.out::println
是一个消费者
Producer
,这意味着它们不接受任何参数并返回某些内容。例如,UUID::randomUUID
是一个生产者
Function
,这意味着它们接受类型为T的参数(可以是应用该方法的实例)并返回类型为Z的结果,在您的示例中,Deque::pollFirst
take是一个函数
。另一个例子是deq::add
,其中deq是Deque
的一个实例,它将是一个函数
因此,您应该使用函数
而不是Callable,因为Callable用于完全不同的东西。另外,iteratethrowqueue(…)
需要是静态的
可调用的
没有应用()
方法。我知道,但现在你明白我想做什么了。使用java.util.function.function
而不是Callable
。函数没有副作用,我需要从Deque这里进行轮询。如何传递函数不是静态的Deque::polFirst
?@Whffgfv Obggcg。你说的“副作用”是什么意思?Callable
没有apply()
方法。我知道,但现在你明白我想做什么了。使用java.util.function.function
而不是Callable
。函数没有副作用,我需要从Deque这里进行轮询。如何传递函数不是静态的Deque::polFirst
?@Whffgfv Obggcg。你说的“副作用”是什么意思?