【问题标题】:Eclipse - Wrong suggestion when extracting a constant with similar variable nameEclipse - 提取具有相似变量名的常量时的错误建议
【发布时间】:2018-08-30 03:02:48
【问题描述】:

我在 java 代码中使用 Eclipse Neon,

当我想提取常量,例如字符串值"subject",同时有一个变量名:

String subject = "subject";

当 Extracting Eclipse 为我提供 SUBJECT2 尽管我没有 SUBJECT 常量时。它似乎受到现有变量名的影响。

我可以指示 Eclipse 向我推荐 SUBJECT,因为它是独一无二的吗?

我没有发现这个问题,这个bug可以报告给eclipse吗?

编辑

从以下内容中提取"subject" 时,它建议SUBJECT

p.put("subject", "mySubject");

(不同的代码)当从下面提取"subject"时,它建议SUBJECT2

String subject = null;
p.put("subject", "mySubject");

编辑 2

只是添加到@howlger 评论,即使主题变量不是 实际上是最终的,它仍然建议SUBJECT2

String subject = null;
p.put("subject", "mySubject");
subject = "notFinal";

【问题讨论】:

  • 你为什么要首先提取一个常量作为常量?
  • @ElliottFrisch 它是一个字符串
  • SUBJECT 是否已在类型层次结构中的某处使用?
  • @nitind 没有任何SUBJECT
  • 您可以在 bugs.eclipse.org 报告错误。

标签: java eclipse constants


【解决方案1】:

Eclipse 建议为常量设置一个唯一名称,该名称不等于忽略大小写其他常量,但也适用于其他变量、参数和字段。这样做是出于代码约定的原因,而不仅仅是为了避免编译器错误

在给定的例子String subject = "subject";有两种情况:

  • 如果subject隐式最终,则在将“主题”提取为常量之前内联subject
  • 如果subject 不是隐式最终,因为稍后分配了不同的值:提取的常量的名称应该更具体(例如SUBJECT_DEFAULT更通用的变量的名称

在这种情况下,我喜欢 Eclipse 为名称添加后缀这一事实。但在我看来,在其他情况下,可以提出更好的建议(不幸的是,这也意味着更复杂)。这是一个示例,其中根据调用 Extract to constant 的位置提出不同的建议:

public void foo(String subject) {
    System.out.println("subject"); // -> private static final String SUBJECT2 = "subject";
}

public void bar() {
    System.out.println("subject"); // -> private static final String SUBJECT = "subject";
}

该问题已报告给 Eclipse (further improvements can be reported to Eclipse JDT, to the component UI here):

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2012-07-19
  • 2016-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-06
  • 2022-08-23
  • 1970-01-01
相关资源
最近更新 更多