«Не удается разрешить символ» при использовании оператора if / else - PullRequest
0 голосов
/ 06 февраля 2012

Мне просто интересно, почему я получаю «не удается разрешить символ initialText» с помощью следующего кода.isItA - это логическое значение, которое пользователь выбирает ранее в зависимости от типа текста (A или B), который он собирается вставить в текстовую область.Есть 2 потенциальных строки для initialText, и та, которая выводится, зависит от логического значения isItA.Я не понимаю, почему эта ошибка появляется, когда я использую initialText вне оператора if / else;if находится внутри оператора if / else, компилятор должен иметь возможность разрешать строку за пределами права?В настоящее время я использую GWT в IntelliJ.На данный момент я все еще нерешительный человек в java, поэтому я бы очень хотел дать базовое объяснение того, почему это происходит :) Заранее спасибо.Фрагмент кода ниже.

protected TextArea getNewTextArea() {
    if ( newTextArea == null ) {

        if (isItA){
            final String initialText = "Please paste valid text A here, and then
            press" + "the \"" + Labels.ADD_A_BUTTON_TEXT + "\" button.";

        }else{
            final String initialText = "Please paste valid text B here, and then press " + "the \"" + Labels.ADD_B_BUTTON_TEXT + "\" button.";
        }


        newTextArea = new TextArea();
        newTextArea.setText( initialText );
        newTextArea.addClickHandler( new ClickHandler() {
            public void onClick( ClickEvent clickEvent ) {
                // If the text is still the original text, then clear it.
                if ( newTextArea.getText().equals( initialText ) ) {
                    newTextArea.setText( "" );
                }

            }
        });
    }
}

Ответы [ 4 ]

3 голосов
/ 06 февраля 2012

initialText не подлежит восстановлению, поскольку он не входит в заданную область блока кода.

Чтобы исправить это, объявите intitalText перед оператором if / else, например:

protected TextArea getNewTextArea() {
    if ( newTextArea == null ) {

        final String initialText;
        if (isItA){
            initialText = "Please paste valid text A here, and then
            press" + "the \"" + Labels.ADD_A_BUTTON_TEXT + "\" button.";

        }else{
            initialText = "Please paste valid text B here, and then press " + "the \"" + Labels.ADD_B_BUTTON_TEXT + "\" button.";
        }


        newTextArea = new TextArea();
        newTextArea.setText( initialText );
        newTextArea.addClickHandler( new ClickHandler() {
            public void onClick( ClickEvent clickEvent ) {
                // If the text is still the original text, then clear it.
                if ( newTextArea.getText().equals( initialText ) ) {
                    newTextArea.setText( "" );
                }

            }
        } );
    }
0 голосов
/ 06 февраля 2012

Вам нужно переместить initialText прямо под начало функционального блока

защищенный TextArea getNewTextArea () {

            String initialText ...
0 голосов
/ 06 февраля 2012

initialText существует только внутри блока curlies.

0 голосов
/ 06 февраля 2012

Поскольку ваш final String initialText является локальным по отношению к if-else блоку. Итак, объявите его вне блока if-else и затем инициализируйте внутри него.

...