ArrayIndexOutOfBoundsException после оператора assert - PullRequest
0 голосов
/ 06 июня 2018

У меня есть массив String tmp, полученный String[] tmp = line.split(",");

Затем

Я получил java.lang.ArrayIndexOutOfBoundsException: 3 по коду

assert tmp.length == 4;
int r = Integer.parseInt(tmp[3]);   ----error line

и java.lang.ArrayIndexOutOfBoundsException: 2 по коду

assert tmp.length == 3;
String name = tmp[2];    -----error line

Я не считаю эту ошибку разумной.Оператор assert проходит правильно, и как массив с .length=4 не имеет индексированных элементов 3?Кто-нибудь может сказать мне, почему ...

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

По умолчанию утверждения отключены, и вы должны включить их, используя один из следующих параметров командной строки:

  • -ea
  • -enableassertions

Вы можете проверить документацию для более подробной активации пакета и подпакета.

Для проверки аргументов или переменных вы должны использовать выделенную библиотеку Assertion или просто создайте свой.

Легким и беглым должен быть valid4j :

//...
Assertive.ensure(tmp.length == 4, "The split result array must have 4 elements: (%d)", tmp.length);
0 голосов
/ 06 июня 2018

Как указано в комментариях, проблема в том, что вы не активировали утверждения в параметрах JVM

В командной строке java MyProgram -ea

Для Eclipse см. этот ответ.

Для IntelliJ см. этот ответ.

...