জাভাতে অবৈধআর্গুমেন্টএক্সসেপশন ছুড়ানোর জন্য সবচেয়ে সংক্ষিপ্ত কোড


21

ওকি, আমরা সবাই জাভাতে একটি অবৈধআর্গুমেন্ট এক্সেকশন ফেলে দেওয়ার স্বাভাবিক উপায়টি জানি:

throw new IllegalArgumentException(); // 37 characters

তবে এটি করার জন্য একটি ছোট (অবশ্যই কম চরিত্রের মতো) উপায় থাকতে হবে। কীভাবে আমরা আরও কম কোড সহ একটি java.lang.IllegalArgumentException উত্পাদন করতে পারি?

  • কোড টুকরাটি জাভা 7 তে সংকলন করে চালাতে হবে run
  • কোনও আমদানি / বাহ্যিক প্যাকেজ নেই (যেমন ব্যবহার না করা 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
ভাগ্যোডোনাল্ড

1
unreported exception InterruptedException; must be caught or declared to be thrown
সংকলকটি

1
ওহো, Ideone স্বয়ংক্রিয়ভাবে যোগ করা throws Exceptionথেকে mainপদ্ধতি। আমি আমার পোস্টে একটি নোট যুক্ত করেছি।
ডোরকনব্ব

1
Mwhahaha! আমি IllegalArgumentExceptionস্মৃতি অনুসারে আমার সন্ধান করতে পেরেছি । গ্রেপের মতো সরঞ্জামের প্রয়োজন নেই। পরিবর্তিত নিয়ম ব্যতীত এটিকে অবৈধ করে তোলে। :-(
জাস্টিন

1
@ ইউএসআর নং; আদিমরা জাভাতে বস্তু নয়।
ডুরকনব

23

এখানে একটা চমৎকার সংক্ষিপ্ত এটা করতে ভাবে, এর 17 13 অক্ষর :

new Long("");

এটি একটি ছুড়ে NumberFormatException, যা একটি IllegalArgumentExceptionএই এবং এই এটা যাচাই করুন।

সমানভাবে, একটি করতে পারে

new Byte("");

দুঃখিত, আমি যা খুঁজছি তা পরিষ্কার করে দিয়েছি: আমি 'পরিষ্কার' অবৈধআর্গুমেন্টএক্সেপশন খুঁজছি। এটি এর নাম দেওয়া উচিত।
ভাগ্যোডোনাল্ড

@ লকিডোনাল্ড "নামকরণ" বলতে আপনার অর্থ কী? স্ট্যাকট্রেসে দেওয়া টাইপ? যদি তাই হয়, যদি কোনও ব্যতিক্রম-কারণ-গ্রহণযোগ্যতা গ্রহণযোগ্য হয় তবে যদি অবৈধ অর্গিউজেন্টেপশনটি অন্য ব্যতিক্রমের কারণ হিসাবে অভ্যন্তরীণভাবে পাস করা হত?
মনিকা পুনরায় ইনস্টল করুন - ζ--

উদ্দেশ্য হ'ল স্বাভাবিক থ্রো নতুন আইএই () প্রতিস্থাপন করা। কোডটি যখন স্থির (মূল) পদ্ধতিতে কার্যকর করা হয় তখন ব্যর্থ হতে হয় Exception in thread "main" java.lang.IllegalArgumentException at Untitled.main(Titled.java:4)। যদি এটি ব্যর্থ হয় (লাইন, ফাইল, স্ট্যাকট্রেস) তাতে কিছু আসে যায় না।
ভাগ্যডোনাল্ড

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)কারণ এটি বিট inverts। সুতরাং আমরা একটি অবৈধ প্যারামিটার পেয়ে যাব, কারণ এটি 0 এর চেয়ে ছোট
1<<7হলে 1 সাত বার স্থানান্তরিত করে খুব বেশি সংখ্যক তৈরি করবে। (এটি 2 বার দিয়ে 7 বার গুণিত হিসাবে একই)। শেষ স্বীকৃত মানটি মনে হচ্ছে 1114111, 1114112ব্যর্থ হবে। দ্রষ্টব্য: এটি আপনার পরিবেশের উপর নির্ভর করে পরিবর্তিত হতে পারে এবং সর্বদা নির্ভরযোগ্য হতে পারে না।

দেখুন ওরাকল ডক্স "Bitwise এবং বিট শিফট অপারেটর" এবং "আদিম ডেটা প্রকার"

২৮ টি অক্ষর:

এবং যদি আপনি একটি অক্ষর গণনা প্রতিযোগিতায় অক্ষর শ্রেণি ব্যবহার করতে পছন্দ করেন না:

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

*) শুধু এই শ্লেষ করতে।


কোনও ধনাত্মক হওয়ার দরকার নেই; আপনি যে কোনও অ-নেতিবাচক করতে পারেন (অর্থাত্ ~0কাজ করে)
জাস্টিন

আমি 0 সম্পর্কে ইতিবাচক হিসাবে ভেবেছিলাম কারণ এর কোনও বিয়োগ নেই। কিন্তু আপনার অধিকার, এবং এমনকি Character.toChars(~-0); কাজ করে।
ভাগ্যডায়োনাল্ড

4
~ 0 হয় -1। অতিরিক্ত অক্ষরের প্রয়োজন ছাড়াও আপনার জন্য 0 -0 কী করে তা নিশ্চিত নয়।
alex.forencich

এটি মজাদার এক্সডি দেখাচ্ছে
ভাগ্যডোনাল্ড

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

যতক্ষণ পর্যন্ত কোড সরাসরি ইলিজালআরগমেন্ট এক্সসেপশন ছুড়ে দেয়, এগুলি এটি করবে।

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)আপনাকে ফাংশনে থ্রোস ডিক্লেয়ারেশন যুক্ত করতে হবে, যাতে এটি আরও দীর্ঘ হয় longer error: unreported exception InterruptedException; must be caught or declared to be thrown
ভাগ্যডয়োন্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.