将 ValidationSupport lambda 调用转换为方法引用
Converting ValidationSupport lambda call to method reference
我刚开始使用 SonarQube 来提高我的代码质量,当我分析一个使用 ControlsFX 进行验证的 JavaFx 项目时,我遇到了这个 "code smell" 错误。
Replace this lambda with a method reference:
support.getValidationResult().getErrors().forEach(error ->
support.getValidationDecorator().applyValidationDecoration(error));
我不确定如何重构它,因为 ValidationSupport class 没有任何静态方法,而我的 IDE 对我想做的大部分事情都发出警告:
The type ValidationSupport does not define
getValidationDecorator(ValidationMessage) that is applicable here
目前我只是在 Sonar 中将其标记为误报,但从长远来看这不是一个好的解决方案 运行 因为它只是隐藏了它。
方法引用不必是对静态方法的引用,它们也可以是对特定对象上的方法的引用。在这种情况下,您可以使用:
support.getValidationResult().getErrors().forEach(
support.getValidationDecorator()::applyValidationDecoration);
这与您的原始操作完全相同 - 在调用 support.getValidationDecorator()
.
的结果中使用错误参数调用 applyValidationDecoration
方法引用 引入了 shorthand lambda 表达式。但是只有特定类型的 lambda 可以 shorthanded 使用这些方法引用。
如果你的 lambda 除了调用另一个方法之外什么都不做;您可以使用这种简短形式(方法引用)来编写 lambda。
在你的情况下;您的 lambda 表达式是:
Consumer<Error> con = error ->
support.getValidationDecorator().applyValidationDecoration(error);
您可以看到 error
刚刚重定向到 applyValidationDecoration
方法。 因此;这是使用方法引用的完全有效的场景。
support.getValidationResult().getErrors()
.forEach(support.getValidationDecorator()::applyValidationDecoration);
如果您有任何疑问,请查看 Oracle tutorial。
我刚开始使用 SonarQube 来提高我的代码质量,当我分析一个使用 ControlsFX 进行验证的 JavaFx 项目时,我遇到了这个 "code smell" 错误。
Replace this lambda with a method reference:
support.getValidationResult().getErrors().forEach(error ->
support.getValidationDecorator().applyValidationDecoration(error));
我不确定如何重构它,因为 ValidationSupport class 没有任何静态方法,而我的 IDE 对我想做的大部分事情都发出警告:
The type ValidationSupport does not define getValidationDecorator(ValidationMessage) that is applicable here
目前我只是在 Sonar 中将其标记为误报,但从长远来看这不是一个好的解决方案 运行 因为它只是隐藏了它。
方法引用不必是对静态方法的引用,它们也可以是对特定对象上的方法的引用。在这种情况下,您可以使用:
support.getValidationResult().getErrors().forEach(
support.getValidationDecorator()::applyValidationDecoration);
这与您的原始操作完全相同 - 在调用 support.getValidationDecorator()
.
applyValidationDecoration
方法引用 引入了 shorthand lambda 表达式。但是只有特定类型的 lambda 可以 shorthanded 使用这些方法引用。
如果你的 lambda 除了调用另一个方法之外什么都不做;您可以使用这种简短形式(方法引用)来编写 lambda。
在你的情况下;您的 lambda 表达式是:
Consumer<Error> con = error ->
support.getValidationDecorator().applyValidationDecoration(error);
您可以看到 error
刚刚重定向到 applyValidationDecoration
方法。 因此;这是使用方法引用的完全有效的场景。
support.getValidationResult().getErrors()
.forEach(support.getValidationDecorator()::applyValidationDecoration);
如果您有任何疑问,请查看 Oracle tutorial。