Okey, todos sabemos a maneira normal de lançar uma IllegalArgumentException em Java:
throw new IllegalArgumentException(); // 37 characters
Mas deve haver maneiras mais curtas (como em menos caracteres) de fazer isso. Como podemos produzir uma java.lang.IllegalArgumentException com ainda menos código?
- O fragmento de código deve ser compilado e executado no java 7.
- Sem importações / pacotes externos (por exemplo, não usando
java.util.Arrays.toString()
)- única exceção: java.lang porque é importado automaticamente.
- Você pode adicionar métodos / classes próprios.
- Ele deve lançar um java.lang.IllegalArgumentException
- Edit: a saída de erro (stacktrace) deve chamá-la de java.lang.IllegalArgumentException, portanto, nenhuma subclasse dela.
Para ter uma base para começar:
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
aomain
método. Eu adicionei uma nota na minha postagem.IllegalArgumentException
de memória. Não há necessidade de ferramentas como grep. Exceto que as regras alteradas o tornam inválido. :-(Aqui está uma maneira curta e agradável de fazer isso, em
1713 caracteres :Ele lança a
NumberFormatException
, que é umIllegalArgumentException
. Isso e isso verificam.Equivalentemente, alguém poderia fazer
fonte
Exception in thread "main" java.lang.IllegalArgumentException at Untitled.main(Titled.java:4)
. Se falhar (linha, arquivo, rastreamento de pilha) não importa.22 caracteres:
Exemplo de execução
Javadoc: java.lang.Character.toChars (int)
Algumas variantes interessantes:
~i
é o mesmo que-1 * (i+1)
porque inverte os bits. Portanto, obteremos um parâmetro ilegal, porque é menor que 0.1<<7
criará um número muito alto, deslocando o 1 sete vezes. (o mesmo que multiplicá-lo 7 vezes por 2). O último valor aceito parece ser1114111
,1114112
falhará. Nota: isso pode mudar dependendo do seu ambiente e nem sempre é confiável.Consulte o Oracle Docs "Operadores bit a bit e deslocamento de bits" e "Tipos de dados primitivos"
28 caracteres:
E se você não gosta de usar a classe de personagem em uma competição de contagem de caracteres *:
*) Apenas para fazer esse trocadilho.
fonte
~0
funciona também)Character.toChars(~-0);
funciona.21 caracteres:
Conforme a documentação,
getProperty
esetProperty
jogueIllegalArgumentException
se a chave estiver vazia.fonte
25 caracteres
Cria um vetor com um comprimento (negativo) inválido:
Exibe:
fonte
Aqui estão 24 caracteres:
Isso jogará um
IllegalFormatException
, que é umIllegalArgumentException
.fonte
19 caracteres:
Lança
java.util.UnknownFormatConversionException
, que herda deIllegalFormatException
, que, por sua vez, herda deIllegalArgumentException
;fonte
14 caracteres
17 caracteres
Quanto ao código que lança diretamente IllegalArgumentException, eles o farão.
Portanto, o código direto é de 17 caracteres, se você estiver sendo um super-defensor e contando os caracteres para adicionar uma cláusula throws à exceção interrompida, você pode abreviá-lo apenas lançando a classe Exception bruta
fonte
this.wait(-1)
não funciona na função principal, devido ao ser principalstatic
.Thread.sleep(-1)
requer que você adicione uma declaração throws à função, para que ela fique mais longa novamente.error: unreported exception InterruptedException; must be caught or declared to be thrown