界面
public interface InterfaceOne {
void start();
void stop();
}
主班
public class MainProg {
public static void main(String [] args){
new ServiceA().start();
}
}
服務A
import java.util.ArrayList;
import java.util.List;
public class ServiceA implements InterfaceOne{
private final List<ServiceB> worker = new ArrayList<>();
public ServiceA(){
for(int i = 0; i < 2; i ){
worker.add(new ServiceB(2));
}
}
@Override
public void start() {
worker.forEach(InterfaceOne::start);
}
@Override
public void stop() {
worker.forEach(InterfaceOne::stop);
}
}
服務B
public class ServiceB extends ServiceC{
int count;
protected ServiceB(int num){
this.count = num;
}
}
服務C
public class ServiceC implements InterfaceOne{
@Override
public void start() {
System.out.println("Starting..");
}
@Override
public void stop() {
System.out.println("Stopping..");
}
}
在這里,我從主類呼叫 ServiceA 的方法,該方法使用方法參考運算子在內部呼叫 serviceB 的方法。ServiceA 也可以像下面這樣寫,而不是使用方法參考運算子,我可以使用 lambda 函式
import java.util.ArrayList;
import java.util.List;
public class ServiceA implements InterfaceOne{
private final List<ServiceB> worker = new ArrayList<>();
public ServiceA(){
for(int i = 0; i < 2; i ){
worker.add(new ServiceB(2));
}
}
@Override
public void start() {
worker.forEach(obj -> obj.start());
}
@Override
public void stop() {
worker.forEach(obj -> obj.stop());
}
}
在這里,我知道這個程式是如何使用 lambda 函式作業的,但想了解它是如何與方法參考運算子一起作業的
worker.forEach(InterfaceOne::start);
這個程式的輸出是
Starting..
Starting..
uj5u.com熱心網友回復:
你寫了:
worker.forEach(InterfaceOne::start);
這將為作業串列的每個元素呼叫 start 方法。不管是在ServiceA的方法范圍內呼叫,worker串列的元素都是ServiceB的,繼承了startServiceC的方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/489680.html
上一篇:更改繼承的函式打字稿
下一篇:為什么是子類[類(匿名)]
