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

luc*_*rot 5 java intellij-idea

在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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

超类EinzMessageBody只指定toJSON(),getReason()也不指定getUsername().

getReason()和之间有什么区别getUsername()

关于@HonzaZidek的评论:

  • 删除extends EinzMessageBody和注释@Override不会改变任何内容.

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

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

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

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

我还搜索getUsername()了其他子类的任何用法,EinzMessageBody并找到了一个.删除这个并没有改变getUsername()in EinzUnregisterResponseMessageBody为灰色.

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

Hon*_*dek 4

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

根据现有答案/sf/answers/2243457051//sf/answers/2860947141/Settings ,我在|下添加对 IntelliJ Idea 描述的引用。Editor| Inspections| Java| Declaration Redundancy| Unused declaration:

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

在此输入图像描述