JavaでIllegalArgumentExceptionをスローする最短コード


21

オーケー、私たちは皆、JavaでIllegalArgumentExceptionをスローする通常の方法を知っています。

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();
    }
}

回答:


29

これらはすべてgrep、パッケージ内のソースコードをpingすることで検出されましたjava.lang

それらはすべて「純粋」になりますIllegalArgumentException(つまり、そのサブクラスではありません)。

マークされたものは、何らかの種類のチェック済み例外をスローするため、宣言に(18文字)を*追加した場合にのみ機能" throws Exception"しますmain

12(30?)文字*

"".wait(-1);

これにより、次の結果が得られます。

java.lang.IllegalArgumentException: timeout value is negative

22(40?)文字*

new Thread().join(-1);

22文字

Character.toChars(-1);

30文字

Character.UnicodeBlock.of(-1);

いいえ、それはをスローできるのでコンパイルしませんInterruptedException
ラッキードナルド14

1
コンパイラはエラーになります。unreported exception InterruptedException; must be caught or declared to be thrown
luckydonald

1
イデオンは自動的throws Exceptionmainメソッドに追加します。投稿にメモを追加しました。
ドアノブ

1
ムファハハ!私はIllegalArgumentException記憶によって自分を見つけることができました。grepなどのツールは必要ありません。変更されたルールを除き、無効にします。:-(
ジャスティン14

1
@usrいいえ; プリミティブはJavaのオブジェクトではありません。
ドアノブ

23

17 13文字で、これを行うための素敵な短い方法があります:

new Long("");

それはスローNumberFormatExceptionです、IllegalArgumentExceptionこれこれで検証します。

同様に、できること

new Byte("");

申し訳ありませんが、私が探しているものを明確にしました:「きれいな」IllegalArgumentExceptionを探しています。名前を付けてください。
ラッキードナルド14

@luckydonald「ネーミング」とはどういう意味ですか?スタックトレースで指定されたタイプ?もしそうなら、IllegalArgumentExceptionが別の例外の原因として内部的に渡された場合、原因による例外は受け入れられますか?
モニカの復活-ζ--2014

目的は、通常のthrow new IAE()を置き換えることです。コードは、静的(メイン)メソッドで実行されると失敗する必要がありException in thread "main" java.lang.IllegalArgumentException at Untitled.main(Titled.java:4)ます。失敗した場合(行、ファイル、スタックトレース)は関係ありません。
ラッキードナルド14

10

22文字:

Character.toChars(-1);

サンプル
Javadocの実行java.lang.Character.toChars(int)

見栄えの良いバリアント:

Character.toChars(~4); // 22 characters, number can be any non-negative (and -0)
Character.toChars(1<<7); // 24 characters

~i-1 * (i+1)ビットを反転するためと同じです。したがって、0よりも小さいため、不正なパラメーターを取得します
1<<7。1を7回シフトすることにより、非常に大きな数値が作成されます。(2で7回乗算するのと同じです)。最後に受け入れられた値はのようで11141111114112失敗します。注:これは環境によって異なる場合があり、常に信頼できるとは限りません。

Oracle Docsの「ビット単位およびビットシフト演算子」および「基本データ型」を参照してください

28文字:

また、キャラクターカウントコンペティションでキャラクタークラスを使用したくない場合:

Enum.valueOf(Enum.class,""); // 28 characters

*)このしゃれをするためだけに。


ポジティブである必要はありません。ネガティブではないこともできます(つまり、~0動作します)
ジャスティン

マイナスがないため、0をプラスと考えました。しかし、あなたの権利、さらにはCharacter.toChars(~-0); 機能します。
ラッキードナルド14

4
〜0は-1です。〜-0が何をするかわからない、追加のキャラクターが必要です。
alex.forencich 14


8

21文字:

System.getProperty("");

ドキュメントあたりとして、getPropertyそしてsetProperty投げるIllegalArgumentExceptionキーが空の場合。


5

25文字

無効な(負の)長さのベクトルを作成します。

new java.util.Vector(-1);

ディスプレイ:

Exception in thread "main" java.lang.IllegalArgumentException: Illegal Capacity: -1
    at java.util.Vector.<init>(Vector.java:129)
    at java.util.Vector.<init>(Vector.java:144)
    at Titled.main(Titled.java:3)


1

19文字:

String.format("%");

Throws java.util.UnknownFormatConversionException、fromから継承し IllegalFormatException、さらに、fromから継承しIllegalArgumentExceptionます。


1

14キャラクター

this.wait(-1);

17キャラクター

Thread.sleep(-1);

IllegalArgumentExceptionを直接スローするコードに関する限り、これらはそれを行います。

From documentation: 
Thread.sleep(int millis): 
Throws:IllegalArgumentException - if the value of millis is negative
InterruptedException - if any thread has interrupted the current thread. 

直接コードは17文字です。スーパースティッカーであり、文字をカウントして割り込み例外のthrows句を追加する場合は、生のExceptionクラスをスローするだけで短縮できます。


1
this.wait(-1)mainが原因で、main関数では機能しませんstatic
ラッキードナルド

Thread.sleep(-1)関数にthrows宣言を追加する必要があるため、再び長くなります。error: unreported exception InterruptedException; must be caught or declared to be thrown
ラッキードナルド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.