Почему я продолжаю получать "Оценки должны содержать либо выражение, либо блок хорошо сформированных утверждений"?

В моем коде я пытаюсь вывести значение src в окне выражений.

public void doIt() {
    String src = "test";
    System.out.println(src);
}

В Eclipse. Я установил точку останова на строке 3, и я открою окно "Выражения".

Я добавляю выражение src для оценки, и я получаю Evaluations must contain either an expression or a block of well-formed statements

Я использовал функции Expressions... COUNTLESS раз в годы моей отладки Java. Почему это происходит сейчас?

Недавно я начал использовать Eclipse Juno.. vs Indigo. Они изменили способ работы выражений?

Ответ 1

Если ваш код использует какие-либо дженерики, вы можете проверить эту ошибку:

https://bugs.eclipse.org/bugs/show_bug.cgi?id=341232

Происходит во всех версиях Eclipse до 4.2. Короче говоря, некоторые генерические выражения заставляют Eclipse полностью терпеть неудачу при любой оценке (см. Этот пример: https://bugs.eclipse.org/bugs/attachment.cgi?id=224760). Не уверен, использует ли ваш код какие-либо дженерики, но если это так, возможно, это так. Обратите внимание, что достаточно иметь один из неприятных дженериков где-то в вашем классе, не обязательно в вашем методе.

Ответ 2

Проверьте, есть ли у вас обновленная версия Eclipse, выглядит эта проблема fixed в Eclipse 3.3

Моя версия Eclipse версии 3.8.2, и если я оцениваю выражение в строке 2, то также получаю ту же ошибку, но в строке 3 ее правильно оценивают.

Ответ 3

Я просто потратил TONS времени, чтобы понять, что если вы создадите пакет "Foo", и внутри этого пакета вы создадите класс под названием "Foo", например:

package Foo;

public class Foo{
    public Foo () {};
}

После того, как вы впервые используете этот класс в своей программе, вы больше не сможете использовать выражения:

import Foo.Foo; //this is the devil i think

public static void main(String[] args){
    EventQueue.invokeLater(new Runnable(){
        public void run(){
            //debug expressions works fine
            Foo tmp = new Foo();
            //debug expressions wouldn't work anymore
        }
    });
}

Эта ошибка может быть воспроизведена до текущего Eclipse Neon 4.7.

Ответ 4

У меня была та же проблема, и я удаляю общий метод в моем коде. Это работает для меня.