Окей, мы все знаем нормальный способ вызвать исключение IllegalArgumentException в Java:
throw new IllegalArgumentException(); // 37 characters
Но должны быть более короткие (как в меньшем количестве символов) способы сделать это. Как мы можем создать исключение java.lang.IllegalArgumentException с еще меньшим количеством кода?
- Фрагмент кода должен компилироваться и запускаться в Java 7.
- Нет импорта / внешних пакетов (например, не используется
java.util.Arrays.toString()
)- Единственное исключение: java.lang, потому что он автоматически импортируется.
- Вы можете добавить собственные методы / классы.
- Это должно бросить java.lang.IllegalArgumentException
- Редактировать: вывод ошибки (stacktrace) должен называться java.lang.IllegalArgumentException, поэтому его подклассов нет.
Чтобы иметь базу, чтобы начать с:
class Titled {
public static void main(String[] args) {
throw new IllegalArgumentException();
}
}
InterruptedException
.unreported exception InterruptedException; must be caught or declared to be thrown
throws Exception
кmain
методу. Я добавил заметку в своем посте.IllegalArgumentException
память. Нет необходимости в таких инструментах, как grep. За исключением измененных правил сделать его недействительным. :-(Вот хороший короткий способ сделать это в
1713 символов :Это бросает
NumberFormatException
, который являетсяIllegalArgumentException
. Это и это подтверждают это.Эквивалентно, можно сделать
источник
Exception in thread "main" java.lang.IllegalArgumentException at Untitled.main(Titled.java:4)
. В случае неудачи (строка, файл, трассировка стека) не имеет значения.22 персонажа:
Запуск примера
Javadoc: java.lang.Character.toChars (int)
Несколько симпатичных вариантов:
~i
так же, как-1 * (i+1)
потому что он инвертирует биты. Таким образом, мы получим недопустимый параметр, потому что он меньше 0.1<<7
создаст слишком большое число, сдвинув 1 в семь раз. (так же, как умножить это на 7 раз с 2). Последнее принятое значение, похоже1114111
,1114112
потерпит неудачу. Примечание: это может измениться в зависимости от вашей среды и может быть не всегда надежным.См. Документы Oracle "Операторы побитового и битового сдвига" и "Примитивные типы данных".
28 символов:
И если вам не нравится использовать класс персонажей в соревновании по подсчету персонажей *:
*) Просто чтобы сделать этот каламбур.
источник
~0
работает тоже)Character.toChars(~-0);
работает.21 персонаж:
Согласно документации,
getProperty
иsetProperty
бросьте,IllegalArgumentException
если ключ пуст.источник
25 персонажей
Создает вектор с недопустимой (отрицательной) длиной:
Вывод:
источник
Вот 24 символа:
Это бросит
IllegalFormatException
, который являетсяIllegalArgumentException
.источник
19 символов:
Броски
java.util.UnknownFormatConversionException
, которые наследуются отIllegalFormatException
, которые, в свою очередь, наследуются отIllegalArgumentException
;источник
14 персонажей
17 персонажей
Что касается кода, который напрямую генерирует исключение IllegalArgumentException, то он это сделает.
прямой код равен 17 символам, если вы суперприклиниваете и подсчитываете символы, чтобы добавить предложение throws для перехваченного исключения, вы можете сократить его, просто бросив необработанный класс Exception
источник
this.wait(-1)
не работает в основной функции, из-за основного существаstatic
.Thread.sleep(-1)
требует, чтобы вы добавили объявление throws в функцию, чтобы оно снова стало длиннее.error: unreported exception InterruptedException; must be caught or declared to be thrown