Sto*_*ica 14 java intellij-idea
鉴于此代码:
private static class Building {
private final int left;
private final int right;
private final int height;
private Building(int left, int right, int height) {
this.left = left;
this.right = right;
this.height = height;
}
}
private PriorityQueue<Building> createMaxHeapByHeight() {
return new PriorityQueue<>(new Comparator<Building>() {
@Override
public int compare(Building o1, Building o2) {
return -Integer.compare(o1.height, o2.height);
}
});
}
Run Code Online (Sandbox Code Playgroud)
IntelliJ显示上面比较行的警告,说:
Run Code Online (Sandbox Code Playgroud)return -Integer.compare(o1.height, o2.height); // ^^^^^^^^^ // 'height' should probably not be passed as parameter 'x'
可以通过对语句的注释来抑制警告:
Run Code Online (Sandbox Code Playgroud)//noinspection SuspiciousNameCombination
好的,但这里有什么可疑的?
此外,如果我将比较字段更改为left或right(仅为了播放和调查),警告将转移到第二个参数,例如:
Run Code Online (Sandbox Code Playgroud)return -Integer.compare(o1.right, o2.right); // ^^^^^^^^ // 'right' should probably not be passed as parameter 'y'
再一次,这里有什么可疑的?为什么它会抱怨该字段的第一个参数,以及字段height的第二个参数left和right?这里的逻辑是什么?
Boh*_*rdt 15
当您在设置中查找检查时,其描述如下:
报告赋值和函数调用,其中赋值的变量的名称或函数参数似乎与分配给它的值的名称不匹配.例如:
Run Code Online (Sandbox Code Playgroud)var x = 0; var y = x;要么
Run Code Online (Sandbox Code Playgroud)var x = 0, y = 0; var rc = new Rectangle(y, x, 20, 20);配置窗格允许指定不应一起使用的名称:如果参数名称或分配目标名称包含来自一个组的单词,并且已分配或传递的变量的名称包含来自不同组的单词,则会报告错误.
因为签名Integer.compare是public static int compare(int x, int y),的IntelliJ会很困惑,认为你正在试图通过一些语义表示高度参数x,可能要代表一定水平偏移,它的名字.
您可以从检查设置中删除这些名称组以解决此问题(或完全禁用检查):
你可以在这里看到逻辑:https://github.com/JetBrains/intellij-community/blob/210e0ed138627926e10094bb9c76026319cec178/java/java-analysis-impl/src/com/intellij/codeInspection/suspiciousNameCombination/SuspiciousNameCombinationInspectionBase.java
相关的块是这样的:
public SuspiciousNameCombinationInspection() {
addNameGroup("x,width,left,right");
addNameGroup("y,height,top,bottom");
}
Run Code Online (Sandbox Code Playgroud)
x被认为是兼容width,left并right,但不与height(反之亦然).
| 归档时间: |
|
| 查看次数: |
3992 次 |
| 最近记录: |