问题 SonarQube为lambda用法提供未使用的私有方法问题


我有以下逻辑;

..
if(list.stream()
       .filter(MyClass::isEnabled)
       .filter(this::isActive)
       .count() > 0) {
    //do smth
}
..
private boolean isActive(MyClass obj) {
    return bool;
}

如你所见, isActive 方法正在流结构中使用,但是当我在Jenkins上构建这个类时,我从SonarQube获得了未使用的私有方法问题,它说你应该删除这个冗余的私有方法。这是一个错误吗?如果没有,为什么他们的分析结构中仍然没有包含lambda逻辑?

显然,只有解决方案才能做到这一点;

.filter(obj -> isActive(obj)),但它破坏了均匀性,甚至可读性(imo)。


1205
2018-02-26 03:47


起源

奇怪。 Lambdas似乎没问题,因为它似乎接受了 MyClass::isEnabled 这是一个方法参考。试试吧 className::instanceMethod 路线在哪里 className 是该类的名称 isActive,即 instanceMethod = isActive 被定义为。 - Kedar Mhaswade


答案:


这是SonarQube java分析器的一个已知问题: https://jira.sonarsource.com/browse/SONARJAVA-583 

这是由于缺乏语义分析来解决正确的方法引用(从而确定this :: isActive引用的方法)。


10
2018-02-26 14:19