জাভা 8-তে, আমি সহজেই লিখতে পারি:
interface Interface1 {
default void method1() {
synchronized (this) {
// Something
}
}
static void method2() {
synchronized (Interface1.class) {
// Something
}
}
}
আমি সম্পূর্ণ সিঙ্ক্রোনাইজেশন শব্দার্থকগুলি পেয়ে যাব যা আমি ক্লাসেও ব্যবহার করতে পারি। আমি তবে synchronizedপদ্ধতি ঘোষণায় পরিবর্তকটি ব্যবহার করতে পারি না :
interface Interface2 {
default synchronized void method1() {
// ^^^^^^^^^^^^ Modifier 'synchronized' not allowed here
}
static synchronized void method2() {
// ^^^^^^^^^^^^ Modifier 'synchronized' not allowed here
}
}
এখন, কেউ তর্ক করতে পারে যে দুটি ইন্টারফেস একইরকম আচরণ করে যা ব্যতীত Interface2একটি চুক্তি প্রতিষ্ঠিত করে method1()এবং method2()যা কিছু Interface1করে তার চেয়ে কিছুটা শক্ত । অবশ্যই, আমরা এটিও যুক্তিযুক্ত হতে পারি যে defaultবাস্তবায়নগুলি কংক্রিট বাস্তবায়ন রাষ্ট্র সম্পর্কে কোনও অনুমান করা উচিত নয়, বা এই জাতীয় কীওয়ার্ডটি কেবল তার ওজনকে টানবে না।
প্রশ্ন:
জেএসআর -৩৩৫ বিশেষজ্ঞ গ্রুপ কেন synchronizedইন্টারফেস পদ্ধতিতে সমর্থন না করার সিদ্ধান্ত নিয়েছে ?
default synchronized, তবুও অগত্যা নয় static synchronized, যদিও আমি মেনে নেব যে ধারাবাহিকতার কারণে পরবর্তীকালে বাদ দেওয়া যেতে পারে।
synchronizedসাবক্লাসগুলিতে সংশোধককে ওভাররেড করা যেতে পারে, তাই চূড়ান্ত ডিফল্ট পদ্ধতি হিসাবে যদি কিছু থাকে তবে তা কেবল বিবেচনা করে। (আপনার অন্য প্রশ্ন)
synchronizedকার্যকর পদ্ধতিতে সিঙ্ক্রোনাইজেশন অপসারণ করে সুপার ক্লাসে ঘোষিত পদ্ধতিগুলিকে ওভাররাইড করতে পারে । আমি বিস্মিত হবে না যে সমর্থন না synchronizedএবং সমর্থন না finalসম্পর্কযুক্ত, যদিও, হয়তো একাধিক উত্তরাধিকার কারণে (যেমন inheriting void x() এবং synchronized void x() , ইত্যাদি)। তবে তা জল্পনা। আমি একটি অনুমোদিত কারণ সম্পর্কে কৌতূহল, যদি এটি আছে।
superযার জন্য পুনরায় বাস্তবায়নের প্রয়োজন হয় এবং ব্যক্তিগত সদস্যদের সম্ভাব্য অ্যাক্সেসের প্রয়োজন হয়। বিটিডব্লু, এই পদ্ধতিগুলিকে "ডিফেন্ডার" বলা হওয়ার একটি কারণ রয়েছে - তারা সহজেই নতুন পদ্ধতি যুক্ত করার অনুমতি দেওয়ার জন্য উপস্থিত রয়েছে।