Java에서 IllegalArgumentException을 발생시키는 가장 짧은 코드


21

자, 우리 모두 Java에서 IllegalArgumentException을 발생시키는 일반적인 방법을 알고 있습니다.

throw new IllegalArgumentException(); // 37 characters

그러나 더 짧은 방법으로 (더 적은 문자로) 그렇게해야합니다. 더 적은 코드로 java.lang.IllegalArgumentException을 어떻게 생성 할 수 있습니까?

  • 코드 조각은 Java 7에서 컴파일하고 실행해야합니다.
  • 가져 오기 / 외부 패키지 없음 (예 :을 사용하지 않음 java.util.Arrays.toString())
    • java.lang은 자동으로 가져 오기 때문에 예외입니다.
  • 고유 한 메소드 / 클래스를 추가 할 수 있습니다.
  • java.lang.IllegalArgumentException을 발생시켜야합니다.
    • 편집 : 오류 출력 (스택 추적)은 java.lang.IllegalArgumentException으로 이름을 지정해야하므로 하위 클래스는 없습니다.

기초를 시작하려면 :

class Titled {
    public static void main(String[] args) {
        throw new IllegalArgumentException();
    }
}

답변:


29

이것들은 모두 grep패키지의 소스 코드를 핑함으로써 발견되었습니다 java.lang.

그들 모두는 "순수한"결과를 가져 IllegalArgumentException옵니다 (즉, 하위 클래스가 아닙니다).

표시된 것들은 어떤 종류의 검사 예외를 던지기 때문에 선언 *" throws Exception"(18 문자)를 추가하면 작동합니다 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.
luckydonald

1
컴파일러 오류 :unreported exception InterruptedException; must be caught or declared to be thrown
luckydonald

1
이런, Ideone은 자동으로 방법에 추가 throws Exception합니다 main. 내 게시물에 메모를 추가했습니다.
Doorknob

1
음 하하! 나는 IllegalArgumentException기억으로 내 것을 찾을 수 있었다 . grep과 같은 도구가 필요하지 않습니다. 변경된 규칙을 제외하고는 유효하지 않습니다. :-(
Justin

1
@usr 아니오; 프리미티브는 Java의 객체가 아닙니다.
Doorknob

23

다음은 17 13 자로 멋진 짧은 방법입니다 .

new Long("");

그것은을 발생 NumberFormatExceptionIllegalArgumentException. 이것이것으로 확인합니다.

마찬가지로, 할 수있는 일

new Byte("");

죄송합니다, 내가 찾고있는 것을 분명히했습니다 : 'clean'IllegalArgumentException을 찾고 있습니다. 그렇게 이름을 붙여야합니다.
luckydonald

@luckydonald "이름 지정"은 무슨 뜻입니까? 스택 트레이스에 주어진 유형? 그렇다면 IllegalArgumentException이 다른 예외의 원인으로 내부적으로 전달 된 경우 원인이있는 예외가 허용됩니까?
복원 모니카-ζ--

목적은 일반 던지기 new IAE ()를 대체하는 것입니다. 정적 (메인) 메소드에서 실행될 때 코드는 실패해야 Exception in thread "main" java.lang.IllegalArgumentException at Untitled.main(Titled.java:4)합니다. 그것이 실패했다 (라인, 파일, 스택 트레이스)는 중요하지 않습니다.
luckydonald

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 번 곱하는 것과 같습니다). 마지막 허용 값 것 같다 1114111, 1114112실패합니다. 참고 : 환경에 따라 변경 될 수 있으며 항상 신뢰할 수있는 것은 아닙니다.

참고 항목 오라클 문서 "비트 단위와 비트 시프트 연산자""기본 데이터 유형"

28 자 :

캐릭터 카운트 경쟁에서 캐릭터 클래스를 사용하는 것을 좋아하지 않는 경우 * :

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

*)이 말장난을 만들기 위해.


긍정적일 필요는 없습니다. 음수 이외의 작업을 수행 할 수 있습니다 (예 : ~0작동)
Justin

마이너스가 없기 때문에 0에 대해 긍정적으로 생각했습니다. 그러나 당신의 권리, 심지어 Character.toChars(~-0); 작동합니다.
luckydonald

4
~ 0은 -1입니다. 추가 캐릭터를 요구하는 것 외에도 ~ -0이 무엇을하는지 잘 모르겠습니다.
alex.forencich

더 재미있어 보인다 xD
luckydonald

8

21 자 :

System.getProperty("");

문서, 당 getPropertysetProperty던져 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

24 자입니다 :

System.out.printf("%z");

이는 발생합니다 IllegalFormatExceptionIllegalArgumentException.


1

19 자 :

String.format("%");

예외 java.util.UnknownFormatConversionException, 어떤에서 상속 IllegalFormatException, 이는 차례로로부터 상속 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 문자입니다. 슈퍼 stickler 인 경우 중간 예외에 대해 throws 절을 추가하기 위해 문자를 계산하면 원시 Exception 클래스를 던져서 단축 할 수 있습니다


1
this.wait(-1)main으로 인해 main 함수에서 작동하지 않습니다 static.
luckydonald

Thread.sleep(-1)함수에 throws 선언을 추가해야하므로 다시 길어집니다. error: unreported exception InterruptedException; must be caught or declared to be thrown
luckydonald
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.