当前位置:  开发笔记 > 编程语言 > 正文

IntelliJ说,应该不应该作为参数x传递

如何解决《IntelliJ说,应该不应该作为参数x传递》经验,为你挑选了2个好方法。

鉴于此代码:

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 createMaxHeapByHeight() {
    return new PriorityQueue<>(new Comparator() {
        @Override
        public int compare(Building o1, Building o2) {
            return -Integer.compare(o1.height, o2.height);
        }
    });
}

IntelliJ显示上面比较行的警告,说:

return -Integer.compare(o1.height, o2.height);
//                      ^^^^^^^^^
//                      'height' should probably not be passed as parameter 'x'

可以通过对语句的注释来抑制警告:

//noinspection SuspiciousNameCombination

好的,但这里有什么可疑的?

此外,如果我将比较字段更改为leftright(仅为了播放和调查),警告将转移到第二个参数,例如:

return -Integer.compare(o1.right, o2.right);
//                                ^^^^^^^^
//                                'right' should probably not be passed as parameter 'y'

再一次,这里有什么可疑的?为什么它会抱怨该字段的第一个参数,以及字段height的第二个参数leftright?这里的逻辑是什么?



1> Bohuslav Bur..:

当您在设置中查找检查时,其描述如下:

报告赋值和函数调用,其中赋值的变量的名称或函数参数似乎与分配给它的值的名称不匹配.例如:

var x = 0;
var y = x;

要么

var x = 0, y = 0;
var rc = new Rectangle(y, x, 20, 20);

配置窗格允许指定不应一起使用的名称:如果参数名称或分配目标名称包含来自一个组的单词,并且已分配或传递的变量的名称包含来自不同组的单词,则会报告错误.

因为签名Integer.comparepublic static int compare(int x, int y),的IntelliJ会很困惑,认为你正在试图通过一些语义表示高度参数x,可能要代表一定水平偏移,它的名字.

您可以从检查设置中删除这些名称组以解决此问题(或完全禁用检查):

在此输入图像描述



2> Oliver Charl..:

你可以在这里看到逻辑: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");
}

x被认为是兼容width,leftright,但不与height(反之亦然).

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有