Java: вопрос об assert-поведении - PullRequest
0 голосов
/ 22 марта 2011

У меня есть этот фрагмент кода

import java.util.ArrayList;
import java.util.List;

public class AssertTest {
    public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        assert(list.add("test")); //<-- adds an element

        System.out.println(list.size());
    }
}

Выход:

0 

Почему список вывода пуст? Как здесь ведет себя assert? Заранее спасибо!

Ответы [ 6 ]

5 голосов
/ 22 марта 2011

Никогда не отстаивайте что-либо с побочными эффектами. Когда вы запускаете без включенных подтверждений (включается с -ea), list.add("test") не будет выполняться.

Это хорошая привычка никогда не утверждать ничего, кроме лжи, как показано ниже:

if (!list.add("test")) {
  assert false;
  // Handle the problem
}
5 голосов
/ 22 марта 2011

Вы должны включить утверждение с -ea flag ..., например;

java -ea -cp . AssertTest

Также использование утверждения является худшим местом для побочных эффектов.

0 голосов
/ 22 марта 2011

метод assert, который проверяет, является ли логическое выражение истинным или ложным.Если выражение оценивается как true, то никакого эффекта нет.Но если он принимает значение false, метод assert печатает трассировку стека, и программа прерывает работу.В этом примере реализации используется второй аргумент для строки, чтобы можно было распечатать причину ошибки.

0 голосов
/ 22 марта 2011

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

0 голосов
/ 22 марта 2011

вы должны включить assert.т.е. запустить как java -ea AssertTest

0 голосов
/ 22 марта 2011

Утверждения должны быть включены.Включите их, используя ключ -ea.

См. Документы по запуску приложений Java .

...