2013-07-03 2 views
1
boolean listIsEmpty = myList.size()==0; 

Будет ли listIsEmpty изменено на false, как только размер myList изменений этого одноразового задания? Если последний, я могу иметь «динамический» логическое, что «часы» myList?boolean меняется, когда его состояние изменилось?

+1

Обратите внимание: '.isEmpty()' более эффективен, чем 'size() == 0'. –

+2

@UwePlonus Действительно ли это? – millimoose

+2

@UwePlonus Это может быть яснее, но серьезно? Вы утверждаете, что на самом деле есть улучшение производительности? Вам нужно будет поддержать это с помощью источника. – Kayaman

ответ

10

Простые ответы: нет и нет.

Выражение оценивается один раз, а затем результат в boolean не изменяется.

Чтобы иметь такой «динамический» boolean, вам нужно создать свой собственный список с помощью слушателя, который достигнет его.

2

Ваш listIsEmpty не изменится, если не выходить за пределы этой конкретной строки кода снова

Чтобы ваше логическое изменение, как только ваш размер списка увеличивается, должен сделать метод, который проверяет размер вашего списка, когда вы добавляете или удаляете что-то.

2
boolean listIsEmpty() { 
    return myList.isEmpty(); 
} 

В этом месте оценивается переменное присваивание.

Используя функцию, описанную выше, if (listIsEmpty()) { ... } оценивает функцию (метод) каждый раз.

+0

@JREN прав; добавлено объяснение. –

+0

Почему вы хотите обернуть это еще одним вызовом метода? Это лишний раз добавляет другой слой. – Makoto

+0

Намного лучше Joop, это имеет смысл сейчас – JREN

1

Способ, которым ваш код написан сейчас, не изменится до тех пор, пока размер не будет переоценен. Но вместо этого вы можете использовать проверку isEmpty() непосредственно в своем списке; таким образом, вам не нужно постоянно контролировать размер списка.

1

Ваш ListisEmpty varible не собирается изменяться, пока вы его не измените. вы должны обновить свою переменную ListIsempty каждый раз, когда вы обновляете свой Mylist,

+0

Я удалил свой неприменимый комментарий. –

3

Нет, поскольку это не определяет математическое соотношение, оно определяет набор инструкций. После того, как инструкции выполнены, нельзя ожидать, что listIsEmpty будет автоматически обновляться.

Чтобы сделать автоматические обновления, загляните в «Шаблон слушателя».

Чтобы написать это условие более разумным образом, ответственность за Список состоит в том, чтобы знать, является ли он пустым, поэтому он содержит метод isEmpty(). Вместо того, чтобы кэшировать эту информацию и действовать в кеше, делегируйте запрос.

if (myList.isEmpty()) { 
    ... do stuff ... 
} 

Не позволит кешу вернуть устаревшее представление о пустоте списка.

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