Okey, nous connaissons tous la façon normale de lever une IllegalArgumentException en Java:
throw new IllegalArgumentException(); // 37 characters
Mais il doit y avoir un moyen plus court (comme en moins de caractères) de le faire. Comment produire une java.lang.IllegalArgumentException avec encore moins de code?
- Le fragment de code doit être compilé et exécuté en java 7.
- Pas d'importations / packages externes (par exemple, pas d'utilisation
java.util.Arrays.toString()
)- seule exception: java.lang car il est importé automatiquement.
- Vous pouvez ajouter vos propres méthodes / classes.
- Il doit lever une java.lang.IllegalArgumentException
- Edit: la sortie d'erreur (stacktrace) doit la nommer java.lang.IllegalArgumentException, donc pas de sous-classes.
Pour avoir une base à partir de laquelle:
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
à lamain
méthode. J'ai ajouté une note dans mon post.IllegalArgumentException
mémoire. Pas besoin d'outils comme grep. Sauf que les règles modifiées le rendent invalide. :-(Voici une belle façon de le faire, en
1713 caractères :Il jette un
NumberFormatException
, qui est unIllegalArgumentException
. Ceci et cela le vérifient.De manière équivalente, on pourrait faire
la source
Exception in thread "main" java.lang.IllegalArgumentException at Untitled.main(Titled.java:4)
. En cas d'échec (ligne, fichier, trace de pile), peu importe.22 caractères:
Exemple d'exécution
Javadoc: java.lang.Character.toChars (int)
Quelques belles variantes:
~i
est le même que-1 * (i+1)
parce qu'il inverse les bits. Nous obtiendrons donc un paramètre illégal, car il est plus petit que 0.1<<7
créera un nombre trop élevé en décalant le 1 sept fois. (identique à la multiplier 7 fois par 2). La dernière valeur acceptée semble être1114111
,1114112
échouera. Remarque: cela peut changer en fonction de votre environnement et peut ne pas être toujours fiable.Voir les documents Oracle "Opérateurs de décalage de bits et de bits" et "Types de données primitifs"
28 caractères:
Et si vous n'aimez pas utiliser la classe de personnage dans une compétition de comptage de personnages *:
*) Juste pour faire ce jeu de mots.
la source
~0
fonctionne aussi)Character.toChars(~-0);
marche même .21 caractères:
Selon la documentation,
getProperty
etsetProperty
lancezIllegalArgumentException
si la clé est vide.la source
25 personnages
Crée un vecteur avec une longueur invalide (négative):
Affiche:
la source
Voici 24 caractères:
Cela lancera un
IllegalFormatException
, qui est unIllegalArgumentException
.la source
19 caractères:
Jets
java.util.UnknownFormatConversionException
, qui hérite deIllegalFormatException
, qui, à son tour, hérite deIllegalArgumentException
;la source
14 personnages
17 personnages
En ce qui concerne le code qui lève directement IllegalArgumentException, ceux-ci le feront.
le code direct est donc de 17 caractères, si vous êtes un super bâton et comptez les caractères pour ajouter une clause throws pour l'exception interrompue, vous pouvez la raccourcir en lançant simplement la classe d'exception brute
la source
this.wait(-1)
ne fonctionne pas dans la fonction principale, en raison de l'être principalstatic
.Thread.sleep(-1)
vous oblige à ajouter une déclaration throws à la fonction, donc elle rallonge.error: unreported exception InterruptedException; must be caught or declared to be thrown