Я использовал, чтобы объявить окончательную строку внутри конструктора. Теперь я хочу вставить оператор if, чтобы при необходимости объявить его по-другому.
Обычно я делал:
public Config(){
final String path = "<path>";
doSomething(path);
}
Сейчас пытаюсь
public Config(String mode){
if (mode = "1") {
final String path = "<path1>";
} else {
final String path = "<path2>";
}
doSomething(path);
}
К сожалению, путь не может быть найден сейчас (я не могу найти символьную ошибку), и я действительно потерян, потому что мое исследование понимает это. Следующие работы, хотя, я просто не могу объяснить ... Я должен глубоко задуматься о чем-то здесь.
public Config(String mode){
final String path;
if (mode = "1") {
path = "<path1>";
} else {
path = "<path2>";
}
doSomething(path);
}
Можете ли вы объяснить мне, что здесь происходит, что я должен прочитать, чтобы получить это.
2 ответа
Можете ли вы объяснить мне, что здесь происходит,
Фрагмент 2: path
объявлен в области действия оператора if
. Он недоступен за пределами этого if
.
Фрагмент 3: path
объявлен в области видимости конструктора. Это доступно в этом конструкторе.
что я должен прочитать о том, чтобы получить это.
Конечно, JLS: https: / /docs.oracle.com/javase/specs/jls/se12/html/jls-6.html#jls-6.3 Это довольно сложно, найти правильную часть, прочитать ее вдумчиво и идти с
doSomething("1".equals(mode) ? "<path1>" : "<path2>");
Область действия любой конечной переменной находится внутри ее блока кода. Это не видно за пределами этого блока. Посмотрите эту ветку, чтобы узнать, почему область действия final определяется следующим образом: Область действия конечной локальной переменной в Java
Похожие вопросы
Связанные вопросы
Новые вопросы
java
Java - это язык программирования высокого уровня. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег редко используется отдельно и чаще всего используется вместе с [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] и [maven].