জাভা 8 এবং তারপরেও, এই প্রশ্নের উত্তরটি এখনও বৈধ তবে এখন আরও সংবেদনশীল।
প্রথমত, গৃহীত উত্তর থেকে এই বিবৃতিগুলি সঠিক থাকে:
- ইন্টারফেসগুলি বোঝানো হয় তাদের চুক্তিযুক্ত অন্তর্নিহিত আচরণগুলি নির্দিষ্ট করা (আচরণের নিয়মের একটি বিবৃতি যা প্রয়োগকারী ক্লাসগুলিকে বৈধ হিসাবে বিবেচনা করার জন্য মেনে চলতে হবে)
- চুক্তি (বিধি) এবং বাস্তবায়ন (নিয়মের প্রোগ্রামিক কোডিং) এর মধ্যে পার্থক্য রয়েছে
- ইন্টারফেসে নির্দিষ্ট পদ্ধতিগুলি সবসময় কার্যকর করা উচিত (কোনও কোনও সময়ে)
সুতরাং, জাভা 8 এ নতুন যে উপদ্রবটি নতুন? "Alচ্ছিক পদ্ধতি" বলতে গেলে নিম্নলিখিত যে কোনও একটি এখন উপযুক্ত pt
1. একটি পদ্ধতি যার বাস্তবায়ন চুক্তিগতভাবে alচ্ছিক
"তৃতীয় বিবৃতি" বলছে যে বিমূর্ত ইন্টারফেস পদ্ধতি সর্বদা প্রয়োগ করা উচিত এবং এটি জাভা 8+-এ সত্যই থেকে যায়। তবে জাভা সংগ্রহ ফ্রেমওয়ার্কের মতো চুক্তিতে কিছু বিমূর্ত ইন্টারফেস পদ্ধতি "বৈকল্পিক" হিসাবে বর্ণনা করা সম্ভব।
এই ক্ষেত্রে, লেখক যিনি ইন্টারফেসটি বাস্তবায়ন করছেন সে পদ্ধতিটি প্রয়োগ না করার জন্য বেছে নিতে পারেন। সংকলক একটি বাস্তবায়নের উপর জোর দেবে, তবে, লেখক এই কোডটি কোনও বিশেষায়িত পদ্ধতির জন্য প্রয়োজন নেই যা নির্দিষ্ট প্রয়োগকারী শ্রেণিতে প্রয়োজন হয় না:
public SomeReturnType optionalInterfaceMethodA(...) {
throw new UnsupportedOperationException();
}
জাভা 7 এবং তার আগে, এটি ছিল কেবলমাত্র একমাত্র "alচ্ছিক পদ্ধতি" যা ছিল সেখানে, অর্থাত্ একটি পদ্ধতি যা বাস্তবায়ন না করা হলে একটি অসমর্থিত অপারেশন এক্সেক্সশন ফেলে দেয়। এই আচরণটি অগত্যা ইন্টারফেস চুক্তি দ্বারা নির্দিষ্ট করা হয় (যেমন জাভা সংগ্রহ ফ্রেমওয়ার্কের interfaceচ্ছিক ইন্টারফেস পদ্ধতি)।
২. একটি ডিফল্ট পদ্ধতি যার পুনরায় বাস্তবায়ন isচ্ছিক
জাভা 8 ডিফল্ট পদ্ধতিগুলির ধারণা চালু করেছিল । এগুলি এমন পদ্ধতি যাগুলির বাস্তবায়ন হতে পারে এবং ইন্টারফেস সংজ্ঞা নিজেই সরবরাহ করে। সাধারণত কেবল তখনই ডিফল্ট পদ্ধতি সরবরাহ করা সম্ভব হয় যখন মেথড বডিটি অন্যান্য ইন্টারফেসের পদ্ধতি ব্যবহার করে (যেমন, "আদিম") রচনা করা যায় এবং কখন this
"এই বস্তু যার শ্রেণিটি এই ইন্টারফেসটি প্রয়োগ করেছে।"
একটি ডিফল্ট পদ্ধতি অবশ্যই ইন্টারফেসের চুক্তিটি সম্পাদন করে (অন্য কোনও ইন্টারফেস পদ্ধতির প্রয়োগের মতো)। সুতরাং, একটি বাস্তবায়নকারী শ্রেণিতে ইন্টারফেস পদ্ধতির একটি প্রয়োগের উল্লেখ লেখকের বিবেচনার ভিত্তিতে (যতক্ষণ আচরণ তার বা তার উদ্দেশ্যে উপযুক্ত হয়)।
এই নতুন পরিবেশে, জাভা সংগ্রহ ফ্রেমওয়ার্কটি আবার লিখে দেওয়া যেতে পারে :
public interface List<E> {
:
:
default public boolean add(E element) {
throw new UnsupportedOperationException();
}
:
:
}
এই পদ্ধতিতে, "alচ্ছিক" পদ্ধতির add()
একটি অসমর্থিত অফার এক্সেক্সশন নিক্ষেপ করার ডিফল্ট আচরণ রয়েছে যদি বাস্তবায়নকারী শ্রেণি তার নিজস্ব কোনও নতুন আচরণ প্রদান করে না, যা হ'ল আপনি যা করতে চান তা হ'ল এবং যা তালিকার চুক্তির সাথে সম্মতিযুক্ত। কোনও লেখক যদি এমন একটি ক্লাস লিখছেন যা তালিকার প্রয়োগে নতুন উপাদান যুক্ত করার অনুমতি দেয় না, তবে এর বাস্তবায়ন add()
alচ্ছিক কারণ ডিফল্ট আচরণটি ঠিক যা প্রয়োজন তা হ'ল।
এই ক্ষেত্রে, উপরে "তৃতীয় বিবৃতি" এখনও সত্য ধরে রেখেছে, কারণ পদ্ধতিটি ইন্টারফেসে নিজেই প্রয়োগ করা হয়েছে।
৩. একটি পদ্ধতি যা Optional
ফলাফল দেয়
চূড়ান্ত নতুন ধরণের alচ্ছিক পদ্ধতিটি কেবল একটি পদ্ধতি যা একটি ফেরত দেয় Optional
। Optional
শ্রেণী সাথে ডিল করার একটি নিশ্চিতভাবে আরো অবজেক্ট ওরিয়েন্টেড উপায় প্রদান করে null
ফলাফল নেই।
প্রোগ্রামিংয়ের একটি সাবলীল শৈলীতে, যেমন নতুন জাভা স্ট্রিমস এপিআইয়ের সাথে কোড করার সময় সাধারণত দেখা যায়, কোনও বিন্দুতে নাল ফলাফল প্রোগ্রামটিকে নুলপয়েন্টারএক্সসেপশন দিয়ে ক্র্যাশ করে তোলে। Optional
বর্গ একটি উপায় যে ক্র্যাশ ক্লায়েন্ট কোড ঘটাচ্ছে ছাড়া অনর্গল শৈলী সক্ষম ক্লায়েন্ট কোডে নাল ফলাফল ফেরার একটি প্রক্রিয়া প্রদান করে।