Я использовал, чтобы объявить окончательную строку внутри конструктора. Теперь я хочу вставить оператор 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);
}

Можете ли вы объяснить мне, что здесь происходит, что я должен прочитать, чтобы получить это.

5
programmar 3 Май 2019 в 11:04

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>");
11
Andy Turner 3 Май 2019 в 08:23

Область действия любой конечной переменной находится внутри ее блока кода. Это не видно за пределами этого блока. Посмотрите эту ветку, чтобы узнать, почему область действия final определяется следующим образом: Область действия конечной локальной переменной в Java

3
harshrd 3 Май 2019 в 08:58