আমি কোডকে হোঁচট খেয়েছি এমন কিছু দেখাচ্ছে:
void run() {
try {
doSomething();
} catch (Exception ex) {
System.out.println("Error: " + ex);
throw ex;
}
}
void doSomething() {
throw new RuntimeException();
}
এই কোডটি আমাকে অবাক করে দেয় কারণ দেখে মনে হচ্ছে যে- run()
আদর্শটি একটি নিক্ষেপ করতে সক্ষম Exception
, যেহেতু এটি ধরে Exception
এবং তারপরে এটি পুনরায় সাফল্য দেয়, তবে পদ্ধতিটি নিক্ষেপ করার ঘোষণা দেওয়া হয় না Exception
এবং দৃশ্যত এটি হওয়ার দরকার নেই। এই কোডটি ঠিক জরিমানা করে (কমপক্ষে জাভা 11 এ)।
আমার প্রত্যাশাটি হ'ল আমাকে throws Exception
- run()
ধর্মাবলম্বীতে ঘোষণা করতে হবে ।
অতিরিক্ত তথ্য
ঠিক একই ভাবে, যদি doSomething
নিক্ষেপ করা ঘোষিত হয় IOException
তারপর শুধুমাত্র IOException
ঘোষণা করা প্রয়োজন run()
-method, যদিও Exception
কট অ্যান্ড rethrown করা হয়।
void run() throws IOException {
try {
doSomething();
} catch (Exception ex) {
System.out.println("Error: " + ex);
throw ex;
}
}
void doSomething() throws IOException {
// ... whatever code you may want ...
}
প্রশ্ন
জাভা সাধারণত পরিষ্কারতা পছন্দ করে, এই আচরণের পেছনের কারণ কী? সবসময় কি এরকম হয়েছে? জাভা ল্যাঙ্গুয়েজ স্পেসিফিকেশনে কোনটি run()
পদ্ধতিটির throws Exception
উপরের কোড স্নিপেটগুলিতে ঘোষণা করার প্রয়োজন নেই ? (যদি আমি এটি যুক্ত করি তবে ইন্টেলিজি আমাকে সতর্ক করে Exception
যা কখনও নিক্ষেপ করা হয় না)।
-source 1.6
পতাকাটি সংকলন প্রত্যাশার মতো সংকলন ত্রুটি উত্থাপন করে। উত্স সামঞ্জস্য 7 সঙ্গে সংকলন সংকলন ত্রুটি উত্থাপন করে না
In detail, in Java SE 7 and later, when you declare one or more exception types in a catch clause, and rethrow the exception handled by this catch block, the compiler verifies that the type of the rethrown exception meets the following conditions : 1. 1. The try block is able to throw it. 2. There are no other preceding catch blocks that can handle it. 3. It is a subtype or supertype of one of the catch clause's exception parameters.
javac
- আমি এমন একটি ক্ষেত্রে চলে আসছি যেখানে গ্রহগ্রাহের সংকলকটি আরও সুক্ষু ছিল।