【发布时间】:2017-07-11 09:59:37
【问题描述】:
所以,我有这个Class 实例列表。我想将其转换为由类声明的Constructors 列表。
我将这些类映射到它们声明的构造函数并使用collect 将其展平:
services.stream()
.map(Class::getDeclaredConstructors)
.collect(ArrayList::new,
this::collectConstructors,
List::addAll)
为了收集,我使用了一个方法,它需要访问类上下文,这就是它不是静态的原因。
private void collectConstructors(List<Constructor> l, Constructor<?>[] arr) {
if (arr.length == 0) {
return;
}
Class<?> clz = arr[0].getDeclaringClass();
if (arr.length > 1) {
throw new MoreThanOneConstructor(clz);
}
if (!Modifier.isPublic(arr[0].getModifiers())) {
throw new NoVisibleConstructor(clz);
}
l.add(arr[0]);
findDefinition(clz).setConstructor(arr[0]);
}
好处是,一切正常。不好的是,IntelliJ 和 SonarQube 都告诉我,没有使用 collectConstructors 方法。丑陋的,或者说很有趣的是,当我点击它并突出显示匹配的对应项时,IntelliJ 完全知道使用了该方法。
工具告诉我,没有使用该方法是怎么来的?缺少工具支持?我的烂代码?这是什么?
【问题讨论】:
-
缺少工具支持
-
当你下面的层添加新功能时,总会有一个bug尾巴;我确信这只是他们的一个小(并且很容易修复)遗漏。 IntelliJ 对错误报告非常敏感,因此您可以考虑向他们报告。
-
我猜你正在使用 sonarLint 并且问题来自它?如果我是正确的:哪个版本?
-
@benzonico 我使用 maven 声纳插件和 sonarqube.com 作为目标。声纳版本是 6.2.1
标签: java intellij-idea java-8 sonarqube