我在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";
Eclipse为常量建议了一个唯一的名称,它不等于忽略其他常量的大小写,也包括其他变量,参数和字段。这是出于代码约定的原因,不仅是为了避免编译器错误。
在给定的例子中String subject = "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):