繁体   English   中英

IntelliJ IDEA灰显了一些未使用的方法,但不是全部

[英]IntelliJ IDEA greys out some unused methods but not all

在IntelliJ IDEA 2017.2.6中,我有以下Java类。

public class EinzUnregisterResponseMessageBody extends EinzMessageBody {

    private final String username, reason;

    public EinzUnregisterResponseMessageBody(String username, String reason){
        this.username = username;

        this.reason = reason;
    }

    /**
     * @return the body as JSONobject, ready to be included as "body":{this returned Object} in a message
     */
    @Override
    public JSONObject toJSON() throws JSONException {
        return new JSONObject("{\"username\":\""+this.username+"\"," +
                "\"reason\":\""+this.reason+"\"}");
    }

    public String getReason() {
        return reason;
    }

    public String getUsername() {
        return username;
    }
}

IntelliJ通常以浅灰色显示未使用的属性。 在这个类中,它只getReason()变灰。 有意义的是它不会使构造函数或字段变灰。 方法toJSON()在抽象超类EinzMessageBody定义,因此必须存在,所以它也不是灰色的也是正确的。 getReason()从未使用过,因此变灰了。 但为什么getUsername()不会变灰? 当我右键单击它并选择查找用法时 ,IntelliJ报告没有找到任何用法。

我知道这个问题 ,但运行分析>检查代码分析>按名称运行检查>未使用的属性似乎对此没有任何影响。 也没有重新启动IDE。

无效缓存和重新启动首先重置显示,以便不会显示任何内容,但一旦完成索引,突出显示将再次相同。

以下是它在IntelliJ中的显示方式 它对我来说是怎样的

超类EinzMessageBody仅指定toJSON()EinzMessageBody指定getReason()getUsername()

getReason()getUsername()什么区别?

关于@HonzaZidek的评论:

  • 卸下extends EinzMessageBody和注释@Override不会改变任何东西。

  • 创建一个完全空的项目并仅粘贴此类和EinzMessageBody使得除了toJson()方法之外的所有内容都EinzMessageBody灰色。 这是预期的,因为我现在没有实例化类 - 因此构造函数是灰色的,并且getReason()getUsername()行为相同(都是灰色的)。

    • 当我将类移动到不同的子包时,这仍然像预期的那样,就像它在我的真实项目设置中一样。

    • 当我实例化类时,这仍然按预期运行:构造函数停止灰显, getReason()getBody()仍然正确地显示为灰色。

我只是拉了我的笔记本电脑(而不是台式电脑),同样的行为也发生在那里。

我还在EinzMessageBody其他子类上搜索了getUsername()任何用法,并找到了一个。 删除这个并没有改变EinzUnregisterResponseMessageBodygetUsername() EinzUnregisterResponseMessageBody变灰。

此答案建议运行“ 分析”>“按名称运行检查”>“未使用的声明” ,因为出于性能原因,IntelliJ可能无法检查常用名称。 这将getReason()getUsername()列为未使用,但显示样式保持不变。

我担心,正如您所怀疑的那样,IntelliJ Idea内置了优化功能。 您可以在JetBrains的问题跟踪器中将其报告为错误或功能请求 - 至少可以选择关闭优化。

根据现有答案https://stackoverflow.com/a/32049386/2886891https://stackoverflow.com/a/40870673/2886891 ,我在Settings下添加了对IntelliJ Idea描述的引用。 Editor | Inspections | Java | Declaration Redundancy | Unused declaration

在编辑器内突出显示期间可能不会报告一些未使用的成员。 由于性能原因,只有在项目中很少出现其名称时才会检查非私有成员。

在此输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM