Eclipse - неправильное предложение при извлечении константы с похожим именем переменной - PullRequest
0 голосов
/ 30 августа 2018

Я использую Eclipse Neon в коде Java,

Когда я хочу извлечь константу, например, строковое значение "subject", имея имя переменной:

String subject = "subject";

При извлечении Eclipse предлагает мне SUBJECT2, хотя у меня нет SUBJECT константы. Кажется, это зависит от имени существующей переменной.

Могу ли я поручить Eclipse предложить мне SUBJECT, потому что он уникален?

Я не нашел такой проблемы, можно ли сообщить об этой ошибке, чтобы затмить?

EDIT

При извлечении "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";

1 Ответ

0 голосов
/ 30 августа 2018

Eclipse предлагает уникальное имя для константы, которая не равна без учета регистра другим константам , но также и другим переменным, параметрам и полям . Это сделано по соображениям кода, а не только во избежание ошибок компилятора .

В данном примере String subject = "subject"; есть два случая:

  • Если subject является неявно окончательным , вставьте subject до извлечения "субъекта" из константы.
  • Если subject равен , не является неявно окончательным , потому что позднее назначается другое значение: либо имя извлеченной константы должно быть более конкретным (например, SUBJECT_DEFAULT) или имя переменной более общее .

В этом случае мне нравится тот факт, что Eclipse добавляет суффикс к имени. Но есть и другие случаи, когда, на мой взгляд, могли бы быть сделаны лучшие предложения (что, к сожалению, также означало бы большую сложность). Вот пример, в котором делаются различные предложения в зависимости от того, где Извлечение в постоянную называется:

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 ( о дальнейших улучшениях можно сообщить в Eclipse JDT, для компонента UI здесь ):

...