जावा में IllegalArgumentException को फेंकने के लिए सबसे छोटा कोड


21

ओके, हम सभी जानते हैं कि जावा में अवैध तरीके से अवैध माल फेंकने का सामान्य तरीका:

throw new IllegalArgumentException(); // 37 characters

लेकिन ऐसा करने के लिए कम (कम अक्षरों में) तरीके होने चाहिए। हम कम कोड के साथ java.lang.IllegalArgumentException कैसे बना सकते हैं?

  • कोड टुकड़ा को जावा 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विधि। मैं अपनी पोस्ट में एक नोट जोड़ दिया है।
डोरकनब

1
Mwhahaha! मैं अपने खोज करने में कामयाब IllegalArgumentExceptionद्वारा स्मृति। ग्रेप जैसे उपकरणों के लिए कोई ज़रूरत नहीं। सिवाय बदला नियम बनाने यह अमान्य। :-(
जस्टिन

1
@usr नहीं; पुरातन जावा में नहीं वस्तुओं रहे हैं।
दरवाज़े

23

यहाँ यह करने के लिए एक अच्छा छोटा तरीका है, 17 13 वर्णों में :

new Long("");

यह एक फेंकता NumberFormatExceptionहै, जो एक है IllegalArgumentExceptionयह और इस सत्यापित करें।

तुल्य, एक कर सकता है

new Byte("");

मैं 'साफ़' IllegalArgumentException के लिए एक देख रहा हूँ: क्षमा करें, मैं के लिए क्या देख रहा हूँ clearified। यह ऐसा नाम रखना चाहिए।
luckydonald

@luckydonald "नामकरण" से आपका क्या अभिप्राय है? प्रकार स्टैकट्रेस में दी गई? यदि हां, तो एक अपवाद-साथ-कारण स्वीकार्य होगा यदि IllegalArgumentException एक और अपवाद के कारण के रूप में आंतरिक रूप से पारित किया गया था?
मोनिका को बहाल करना - Sep-- 11

इसका उद्देश्य सामान्य थ्रो नए IAE () को बदलना है। स्थिर (मुख्य) पद्धति में निष्पादित होने पर कोड को विफल होना पड़ता है Exception in thread "main" java.lang.IllegalArgumentException at Untitled.main(Titled.java:4)। क्या यह विफल रहता है (लाइन, फ़ाइल, स्टैक्ट्रेस) कोई फर्क नहीं पड़ता।
luckydonald

10

22 अक्षर:

Character.toChars(-1);

चल रहा उदाहरण
जावदोक: 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<<71 सात बार स्थानांतरण से एक बहुत अधिक संख्या पैदा करेगा। (समान गुणा के रूप में यह 7 2 के साथ बार)। पिछले स्वीकार किए जाते हैं मूल्य प्रतीत हो रहा है 1114111, 1114112असफल हो जायेगी। नोट: यह आपके वातावरण के आधार पर बदल सकता है, और हमेशा विश्वसनीय नहीं हो सकता है।

देखें ओरेकल डॉक्स "बिटवाइस और थोड़ा बदलाव ऑपरेटरों" और "आदिम डेटा प्रकार"

28 अक्षर:

और यदि आप एक वर्ण को महत्वपूर्ण प्रतियोगिता में चरित्र वर्ग का उपयोग कर पसंद नहीं है *:

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

*) बस यह वाक्य बनाने के लिए।


किसी भी सकारात्मक होने की जरूरत नहीं है; आप किसी भी गैर नकारात्मक कर सकते हैं (यानी ~0भी काम करता है)
जस्टिन

मैं एक सकारात्मक रूप में 0 के बारे में सोचा है, क्योंकि यह कोई शून्य है। लेकिन अपने अधिकार है, और भी Character.toChars(~-0); काम करता है।
luckydonald

4
~ 0 -1 है। सुनिश्चित नहीं हैं कि क्या ~ -0 एक अतिरिक्त चरित्र की आवश्यकता होती है इसके अलावा, आप के लिए करता है।
alex.forencich

यह मजेदार लग रहा है xD
20

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

यहाँ 24 अक्षर है:

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

यह एक फेंक देते हैं IllegalFormatException, जो एक है IllegalArgumentException


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 वर्णों का है, यदि आप एक सुपर स्टिकलर हैं और इंटरप्टेड अपवाद के लिए थ्रो क्लॉज जोड़ने के लिए चार्ट्स की गिनती कर रहे हैं, तो आप इसे कच्चा अपवाद वर्ग फेंककर छोटा कर सकते हैं


1
this.wait(-1)मुख्य होने के कारण मुख्य कार्य में काम नहीं करता है static
सौभाग्यवती

Thread.sleep(-1)एक समारोह के लिए घोषणा फेंकता जोड़ने के लिए आप की आवश्यकता है, जिससे अब वह फिर से हो जाता है। error: unreported exception InterruptedException; must be caught or declared to be thrown
भाग्योदयकाल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.