জাভা 8 এর অন্যতম দরকারী বৈশিষ্ট্য হ'ল defaultইন্টারফেসে নতুন পদ্ধতি। কেন তাদের পরিচয় করানো হয়েছে তার মূলত দুটি কারণ রয়েছে (অন্যরা থাকতে পারে):
- প্রকৃত ডিফল্ট বাস্তবায়ন সরবরাহ করা। উদাহরণ:
Iterator.remove() - জেডিকে এপিআই বিবর্তনের অনুমতি দেওয়া হচ্ছে। উদাহরণ:
Iterable.forEach()
একটি API ডিজাইনার দৃষ্টিকোণ থেকে, আমি ইন্টারফেস পদ্ধতি অন্যান্য সংশোধনকারীদের ব্যবহার করতে যেমন পাবে চেয়েছিলাম final। ক্লাস বাস্তবায়নে "দুর্ঘটনাজনক" ওভাররাইডগুলি রোধ করার সুবিধার্থে পদ্ধতি যুক্ত করার সময় এটি কার্যকর হবে:
interface Sender {
// Convenience method to send an empty message
default final void send() {
send(null);
}
// Implementations should only implement this method
void send(String message);
}
উপরোক্ত ইতিমধ্যে সাধারণ অনুশীলন যদি Senderকোনও শ্রেণি হত:
abstract class Sender {
// Convenience method to send an empty message
final void send() {
send(null);
}
// Implementations should only implement this method
abstract void send(String message);
}
এখন, defaultএবং finalস্পষ্টতই কীওয়ার্ডগুলির সাথে বিরোধিতা করছি, তবে ডিফল্ট কীওয়ার্ডটি নিজেই কঠোরভাবে প্রয়োজন হত না , তাই আমি ধরে নিচ্ছি যে এই বৈপরীত্যটি ইচ্ছাকৃত, "দেহের সাথে শ্রেণিবদ্ধ পদ্ধতি" (কেবল পদ্ধতি) এবং "ইন্টারফেসের মধ্যে সূক্ষ্ম পার্থক্য প্রতিফলিত করতে শরীরের সাথে পদ্ধতিগুলি (ডিফল্ট পদ্ধতি), অর্থাত্ পার্থক্য যা আমি এখনও বুঝতে পারি নি।
কিছু সময়, ব্রায়ান গয়েটসের উদ্ধৃতি দিয়ে , ইন্টারফেস পদ্ধতিগুলির মতো staticএবং পরিবর্তিত সংশোধনকারীদের পক্ষে সমর্থন finalএখনও পুরোপুরি অনুসন্ধান করা হয়নি :
অন্য অংশটি হ'ল আমরা ইন্টারফেসে শ্রেণি-নির্মানের সরঞ্জামগুলিতে সমর্থন করতে যাচ্ছি, যেমন চূড়ান্ত পদ্ধতি, ব্যক্তিগত পদ্ধতি, সুরক্ষিত পদ্ধতি, স্থিতিশীল পদ্ধতি ইত্যাদি The উত্তরটি: আমরা এখনও জানি না
২০১১ সালের শেষের দিকে, স্পষ্টতই, staticইন্টারফেসগুলিতে পদ্ধতিগুলির জন্য সমর্থন যুক্ত করা হয়েছিল। স্পষ্টতই, এটি জেডিকে গ্রন্থাগারগুলিতে নিজের মতো প্রচুর মান যুক্ত করেছে Comparator.comparing()।
প্রশ্ন:
কারণটি কী final(এবং এছাড়াও static final) জাভা 8 ইন্টারফেসে কখনও তৈরি করেনি?
finalকোনও পদ্ধতিকে ওভাররাইড করা থেকে বিরত করে এবং ইন্টারফেস থেকে উত্তরাধিকার সূত্রে প্রাপ্ত পদ্ধতিগুলি কীভাবে আপনাকে ওভাররাইড করা উচিত তা দেখে, কেন এটি চূড়ান্ত করার জন্য এটি বোধগম্য হবে তা আমি দেখতে পাচ্ছি না। যদি না বোঝানো হত যে পদ্ধতিটি চূড়ান্ত হয় তারপরে একবারে ওভাররাইড করার পরে .. সেই ক্ষেত্রে, সম্ভবত কাস অসুবিধা আছে? যদি আমি এই অধিকারটি বুঝতে না পারি তবে দয়া করে আমাকে কিলোমিটার যেতে দিন। আকর্ষণীয় বলে মনে হচ্ছে
finalপ্রয়োগকারী ক্লাসগুলিকে একটি ইন্টারফেস পদ্ধতির ডিফল্ট বাস্তবায়নকে ওভাররাইড করা থেকে বিরত রাখার একটি ব্যবহার রয়েছে।