继承如何在Java中使用方法引用运算符



接口

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方法。

最新更新