我有一个记录器API,该记录器接受IStatus是蚀IStatus对象的供应商。

IStatus status = new Status(Status.ERROR,"plugin","Message",e);


例:-

接口:

void log(Supplier<IStatus> statusSupplier);


实现方式:

public void log(Supplier<IStatus> statusSupplier) {
    if(statusSupplier.get() == null) {
        return;
    }
    handle(statusSupplier.get());
}


如何使用客户端代码调用此API。请提出如何为上述方法创建lambda表达式。
还是此方法对于Java 8 lambdas.please是正确的,请提出一些想法?

最佳答案

Supplier是Java 8的功能接口之一。它具有一个没有参数的方法(get()),并返回通用参数的实例。

因此,在您的情况下,Supplier<IStatus>应该返回一个IStatus实例。您可以使用以下代码实现此目的:

log(() -> new Status(Status.ERROR, "plugin", "Message", e));


说明:此lambda表达式将是get接口的Supplier方法的实现。 ()表示该方法不接受任何参数。当您的代码仅包含一行代码时,您不需要return语句,因为默认情况下会返回此行的结果。

供应商的日志记录实现将通过在真正需要之前不执行代码来帮助您。例如,当您调用log方法执行一些复杂的功能时。

08-04 14:33