首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IntelliJ与Java函数接口

IntelliJ与Java函数接口
EN

Stack Overflow用户
提问于 2018-11-07 06:45:08
回答 2查看 364关注 0票数 1

我的Spring组件实现了java.util.function.Function。背后的想法是强制功能风格与小封装功能。

代码语言:javascript
复制
@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出现了两个问题:

  • “查找使用”提供了一个查找基本方法用法的选择。如果我不小心撞上了“是”,IntelliJ就会发现无数次的使用,并且会慢下来,直到它几乎结冰。那么,我当然应该在这里选择“不”,但这仍然是一个小问题。
  • 在流(例如过滤器)中使用“方法引用”(如IntelliJ建议的)中的函数更有问题。使用“查找用法”并选择“否”将不会显示“真”用法。这使得在代码中很难导航。

这就引出了我的问题:使用内置函数接口是一种良好的实践,还是应该编写自己的函数而不将其声明为FunctionalInterface?您认为上述问题是IntelliJ错误吗?你知道有什么解决办法吗?

EN

回答 2

Stack Overflow用户

发布于 2018-11-07 07:44:39

您的方法在我看来是有效的,但我尽量避免直接实现Function。主要原因是:命名

我可以理解,如果一个类有一个有意义的名称(例如InOutMapFunction),那么您可能也不需要该方法有一个有意义的名称。不过,我更喜欢像InOutMapper.mapInToOut这样的名字,而不是InOutMapFunction.apply

此外,如果您能想到多个InOutMapper,那么就让它成为一个接口,并让组件实现它。

有些人可能认为,如果您自己的功能接口与现有的接口“相对应”,那么创建它们是不值得的,但我几乎不后悔,尤其是在实际使用情况下,这会对可读性产生很大影响,例如:

  • SomeParticularTypeContextFinder,和
  • Function<SomeParticularType, SomeParticularTypeContext>

下面是我如何实现您的示例:

代码语言:javascript
复制
@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
    }
}
票数 1
EN

Stack Overflow用户

发布于 2018-11-07 07:28:09

您可以通过“查找用例设置”(默认为Windows: CTRL+ALT+SHFT+F7)限制搜索范围。

这些设置适用于通过ALT+F7搜索以及鼠标轮单击一个。也许把它限制在你现在的模块上就行了吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53184684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档