2016-03-24 5 views
1

У меня есть этот конфигурационный класс:Intellij debugger: true становится ложным, что происходит ...?

public class ShiroConfiguration { 
    private final boolean enabled = false; 

    public boolean isEnabled() { 
     return enabled; // **** 
    } 

Очевидно, что ошибка состоит в том, что я сделал с поддержкой флага «окончательным», поэтому он никогда не может быть ничего, кроме ложного.

Во время выполнения я пытался выяснить, почему моя конфигурация не включена, поэтому запустил код в отладчике (в IntelliJ) с точкой прерывания на выделенной строке. Отладчик показал, что enabled имеет значение «true», но этот метод определенно возвращает значение «false».

Почему отладчик может видеть неправильную версию объекта?

Я не могу понять, как это возможно. Это ошибка в IntelliJ или в интерфейсе отладки Java?

==============

Вот что я вижу в отладчике в контрольной точке на линии, которая вызывает config.isEnabled():

enter image description here

+0

1. Некоторые программы имеют ошибки. 2. Все отладчики - это программы. – dasblinkenlight

+0

Кажется, что-то сообщать напрямую [JetBrains] (https://youtrack.jetbrains.com/oauth?state=%2Fissues%2FIDEA). –

+0

Вы проверили в отладчике, что экземпляр, где вы достигли точки разрыва, является вашим классом? Возможный сибо - это перенос вашего класса конфигурации в другой класс, который, вероятно, перезаписывает вас. –

ответ

0

Если вы не ошиблись при вызове метода, т.е. называемом методом другого класса, это определенно кажется ошибкой в ​​отладчике. Отладчик, по-видимому, пренебрегает ключевым словом final в программе временно. Просто попробуйте удалить ключевое слово final на мгновение и посмотреть, действительно ли это так.

+0

Да, когда я удаляю ключевое слово «final», возвращаемое значение равно «true». Все еще интересно, если это ошибка в IntelliJ или интерфейс отладки Java (JDI). – user2800708

+0

@ user2800708 Итак, без конечного ключевого слова, результат - это то, что вы ожидаете? –

+0

Это правильно. – user2800708

Смежные вопросы