接口
public interface InterfaceOne {
void start();
void stop();
}
主要类别
public class MainProg {
public static void main(String [] args){
new ServiceA().start();
}
}
ServiceA
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);
}
}
ServiceB
public class ServiceB extends ServiceC{
int count;
protected ServiceB(int num){
this.count = num;
}
}
ServiceC
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..
您写道:
worker.forEach(InterfaceOne::start);
这将为辅助列表的每个元素调用start方法。如果它是在ServiceA的方法范围内调用的,这并不重要,辅助列表的元素是ServiceB的,它们继承了ServiceC的start
方法。