মূল কারণ হিসাবে আমি কীভাবে ব্যতিক্রমের সংকলনটি পাস করতে পারি?


52

কিছু পদ্ধতি, myMethodবিভিন্ন সমান্তরাল মৃত্যুদন্ডের আবেদন করে এবং তাদের সমাপ্তির অপেক্ষায় awa

এই সমান্তরাল ফাঁসি ব্যতিক্রম দিয়ে শেষ করতে পারে। সুতরাং myMethodএকটি ব্যতিক্রম তালিকা পায়।

আমি মূল কারণ হিসাবে ব্যতিক্রম তালিকাটি পাস করতে চাই, তবে মূল কারণটি কেবল একটি একক ব্যতিক্রম হতে পারে। অবশ্যই আমি যা চাই তা অর্জন করার জন্য আমি আমার নিজস্ব ব্যতিক্রম তৈরি করতে পারি, তবে আমি জানতে চাই যে জাভা, স্প্রিং, বা স্প্রিং ব্যাচে এইরকম কিছু বাক্সের বাইরে রয়েছে কিনা।


3
.NET AggregateExceptionএর সাথে ব্যতিক্রমগুলির একটি তালিকা রয়েছে। এই ধারণাটি জাভাতেও প্রযোজ্য।
usr ডিরেক্টরির

উত্তর:


49

আমি নিশ্চিত না যে আমি এটি করেছি (যদিও জাভাডক দেওয়া হলেও আমি আপনাকে কেন সংকোচ করব তা বলতে পারিনি), তবে সেখানে চাপানো ব্যতিক্রমগুলির তালিকা রয়েছে Throwable, যার মাধ্যমে আপনি যুক্ত করতে পারেন addSuppressed। জাভাডক বলে না বলে মনে হচ্ছে এটি কেবলমাত্র জেভিএম-এর সাথে-সংস্থানসমূহ ব্যবহার করে:

এই ব্যতিক্রমটি সরবরাহ করার জন্য চাপা দেওয়া ব্যতিক্রমগুলির ক্ষেত্রে নির্দিষ্ট ব্যতিক্রম সংযোজন করে। এই পদ্ধতিটি থ্রেড-নিরাপদ এবং সাধারনত সম্পদ বিবরণীর মাধ্যমে সাধারণত (স্বয়ংক্রিয়ভাবে এবং অন্তর্নিহিত) বলা হয়।

কনস্ট্রাক্টরের মাধ্যমে অক্ষম করা না থাকলে দমন আচরণ সক্ষম করা হয়। যখন দমন অক্ষম করা হয়, এই পদ্ধতিটি তার যুক্তি যাচাই করা ছাড়া আর কিছুই করে না।

মনে রাখবেন যে যখন একটি ব্যতিক্রম অন্য ব্যতিক্রম ঘটায় তখন প্রথম ব্যতিক্রম সাধারণত ধরা পড়ে এবং তারপরে দ্বিতীয় ব্যতিক্রমটি প্রতিক্রিয়াতে ফেলে দেওয়া হয়। অন্য কথায়, দুটি ব্যতিক্রমের মধ্যে একটি কার্যকরী সংযোগ রয়েছে। বিপরীতে, এমন পরিস্থিতি রয়েছে যেখানে দুটি স্বতন্ত্র ব্যতিক্রম ভাইবোন কোড ব্লকগুলিতে নিক্ষেপ করা যেতে পারে, বিশেষত একটি সংস্থান-সংস্থার বিবৃতিতে চেষ্টা ব্লক এবং সংকলক দ্বারা উত্পাদিত অবশেষে ব্লক যা সংস্থানটি বন্ধ করে দেয়। এই পরিস্থিতিতে ছোঁড়া ব্যতিক্রমগুলির মধ্যে একটিরই প্রচার করা যেতে পারে। ট্রান্স-উইথ রিসোর্স বিবৃতিতে, যখন এই জাতীয় দুটি ব্যতিক্রম হয়, চেষ্টা ব্লক থেকে উদ্ভূত ব্যতিক্রম প্রচার করা হয় এবং শেষ অবধি থেকে ব্যতিক্রম চেষ্টা ব্লক থেকে ব্যতিক্রম দ্বারা দমন করা ব্যতিক্রমগুলির তালিকায় যুক্ত হয়। একটি ব্যতিক্রম স্ট্যাকটি খুলে দেয়,

একটি ব্যতিক্রম হতে পারে ব্যতিক্রমকে দমন করতে পারে এবং অন্য ব্যতিক্রমের কারণেও হতে পারে। কোনও ব্যতিক্রমের কারণ রয়েছে কিনা তা নির্মানের সময় অর্থহীনভাবে জানা যায়, ব্যতিক্রম অন্য ব্যতিক্রমকে দমন করবে কিনা তা অসম্পূর্ণ, যা কেবলমাত্র ব্যতিক্রম ছোঁড়ার পরে নির্ধারিত হয়।

নোট করুন যে প্রোগ্রামার লিখিত কোড এই পরিস্থিতিতে কল করার সুবিধা নিতে সক্ষম হয় যেখানে একাধিক ভাইবোন ব্যতিক্রম রয়েছে এবং কেবল একটির প্রচার করা যেতে পারে।

মনে রাখবেন যে সর্বশেষ অনুচ্ছেদটি আপনার ক্ষেত্রে উপযুক্ত suit


[...] একটি ব্যতিক্রম অন্য ব্যতিক্রমগুলি দমন করবে কিনা বা না [...] সাধারণত কেবলমাত্র ব্যতিক্রম ছোঁড়ার পরে নির্ধারিত হয়। আমি ভাবছি যখন সমান্তরাল রান থেকে একাধিক চাপা ব্যতিক্রম সংগ্রহ করা হয় তখন এটি হবে না।
0

24

ব্যতিক্রম এবং তাদের কারণগুলি সর্বদা কেবল 1: 1 জিনিস: আপনি একটি ব্যতিক্রম ছুঁড়ে ফেলতে পারেন এবং প্রতিটি ব্যতিক্রমের কেবল একটি কারণ থাকতে পারে (যার আবার একটি কারণ হতে পারে ...)।

এটি একটি ডিজাইনের ত্রুটি হিসাবে বিবেচনা করা যেতে পারে, বিশেষত যখন আপনি বর্ণিত হিসাবে বহু-থ্রেডযুক্ত আচরণ বিবেচনা করছেন।

এটি জাভা addSuppressedthrow নিক্ষেপযোগ্যভাবে যুক্ত হওয়ার কারণগুলির মধ্যে একটি কারণ যা মূলত অন্য একের সাথে কিছু পরিমাণ ব্যতিক্রম সংযোজন করতে পারে (অন্যান্য প্রাথমিক অনুপ্রেরণা ছিল-সম্পদ সহ চেষ্টা করা ছিল যা নিঃশব্দে বাদ না দিয়ে অবশেষে ব্লকে ব্যতিক্রমগুলি পরিচালনা করার একটি উপায়ের প্রয়োজন ছিল) তাদের)।

সুতরাং মূলত যখন আপনার 1 টি ব্যতিক্রম থাকে যা আপনার প্রক্রিয়াটিকে ব্যর্থ করে তোলে, আপনি সেইটিকে আপনার উচ্চ-স্তরের ব্যতিক্রমের কারণ হিসাবে যুক্ত করেন এবং আপনার যদি আর কিছু থাকে, তবে আপনি সেগুলি ব্যবহার করে আসলটিতে যুক্ত করুন addSuppressed। ধারণাটি হ'ল সেই প্রথম ব্যতিক্রম অন্যদের "রিয়েল ব্যতিক্রম চেইন" এর সদস্য হওয়ার জন্য "চাপা দেওয়া" করে।

কোডের উদাহরণ:

Exception exception = null;
for (Foobar foobar : foobars) {
  try {
    foobar.frobnicate();
  } catch (Exception ex) {
    if (exception == null) {
      exception = ex;
    } else {
      exception.addSuppressed(ex);
    }
  }
}
if (exception != null) {
  throw new SomethingWentWrongException(exception);
}

4
আপনার প্রস্তাব অনুসারে আমি এটি পুরোপুরি করব না, যদি না অন্তর্নিহিত ব্যতিক্রমগুলিকে সত্যই "প্রধান" হিসাবে চিহ্নিত করা না যায়। আপনি যদি স্বেচ্ছায় কোনও ব্যতিক্রমটিকে মুখ্য হিসাবে এবং অন্যদেরকে দমন করা হিসাবে বেছে নিয়ে থাকেন তবে আপনি একজন আহ্বানকারীকে দমন করা ব্যতিক্রম উপেক্ষা করার জন্য এবং কেবল প্রধানটির প্রতিবেদন করার জন্য আহ্বান জানাচ্ছেন - এমনকি যদি "মূল" ব্যতিক্রমটি টাইপআইইন ইউজারআইপুট এক্সেকশন এবং এর মধ্যে একটিও হয় চাপা পড়াগুলি হ'ল একটি ডেটাবেসকর্পড এক্সেপশন।
ইলমারি করোনেন

1
… পরিবর্তে, আমি সামথিংওংট্রংএক্সেপশন দ্বারা দমনকৃত সমস্ত অন্তর্নিহিত ব্যতিক্রমগুলি চিহ্নিত করব এবং সেই ব্যতিক্রমটি পরিষ্কারভাবে ইঙ্গিত করে যে এক বা একাধিক চাপা ব্যতিক্রম অনুসরণ করা উচিত , যেমন " এক্স আউট অফ ওয়াই কাজগুলি ব্যর্থ হয়েছে, নীচে ব্যর্থতার তালিকা দেখুন "।
ইলমারি করোনেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.