我的Spring组件实现了java.util.function.Function。背后的想法是强制功能风格与小封装功能。
@Component
public class MyFunction implements Function<In, Out> {
public Out apply(In in) { .... }
}
// example usage
@RestController
public class MyApi {
private MyFunction f;
public void foo() {
someList.stream()
.map(f)
. // whatever
}
}IntelliJ 2018.1出现了两个问题:
这就引出了我的问题:使用内置函数接口是一种良好的实践,还是应该编写自己的函数而不将其声明为FunctionalInterface?您认为上述问题是IntelliJ错误吗?你知道有什么解决办法吗?
发布于 2018-11-07 07:44:39
您的方法在我看来是有效的,但我尽量避免直接实现Function。主要原因是:命名。
我可以理解,如果一个类有一个有意义的名称(例如InOutMapFunction),那么您可能也不需要该方法有一个有意义的名称。不过,我更喜欢像InOutMapper.mapInToOut这样的名字,而不是InOutMapFunction.apply。
此外,如果您能想到多个InOutMapper,那么就让它成为一个接口,并让组件实现它。
有些人可能认为,如果您自己的功能接口与现有的接口“相对应”,那么创建它们是不值得的,但我几乎不后悔,尤其是在实际使用情况下,这会对可读性产生很大影响,例如:
SomeParticularTypeContextFinder,和Function<SomeParticularType, SomeParticularTypeContext>。下面是我如何实现您的示例:
@Component
public class PlainInOutMapper implements InOutMapper {
@Override
public Out mapInToOut(In in) { .... }
}
@FunctionalInterface
interface InOutMapper {
Out mapInToOut(In in);
}
// example usage
@RestController
public class MyApi {
private List<In> someList;
private InOutMapper mapper;
public void foo() {
someList.stream()
.map(mapper::mapInToOut)
. // whatever
}
}发布于 2018-11-07 07:28:09
您可以通过“查找用例设置”(默认为Windows: CTRL+ALT+SHFT+F7)限制搜索范围。

这些设置适用于通过ALT+F7搜索以及鼠标轮单击一个。也许把它限制在你现在的模块上就行了吗?
https://stackoverflow.com/questions/53184684
复制相似问题