所以,我有Class
个实例列表。我想将它转换为由类声明的Constructor
列表。
我将类映射到它们声明的构造函数并用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完全知道该方法的使用,当我点击它并突出显示匹配的对应物时。
工具如何告诉我,该方法未被使用?缺少工具支持?我的糟糕的代码?它是什么?
答案 0 :(得分:1)
它已被确定为SonarQube中的已知issue。它说它们已经修复了4.0版。这是语义分析的一个问题。
您的代码中没有问题,只有工具。
答案 1 :(得分:0)
也许可以静态分析serivces.isEmpty()始终为true,因此stream()将为空并且不会执行collectConstructors调用?