আপনি এই ধারণাটি সঠিকভাবে করেছেন যে অ স্থিতিশীল অভ্যন্তর শ্রেণিতে উপলব্ধ বৈশিষ্ট্য অ্যাক্সেস উচ্চ সংযোগের দিকে পরিচালিত করে, তাই নিম্নমানের মানের দিকে, এবং (অজ্ঞাতনামা এবং অ-স্থানীয় ) অভ্যন্তর শ্রেণিগুলি সাধারণত স্থিতিশীল হওয়া উচিত।
অভ্যন্তরীণ শ্রেণীকে অ-স্থিতিশীল করার সিদ্ধান্তের নকশাগুলি জাভা পাজলার্স , ধাঁধা 90 এ বলা হয়েছে (নীচে উদ্ধৃতিতে গা bold ় ফন্টটি আমার):
আপনি যখনই কোনও সদস্য শ্রেণি লিখবেন, নিজেকে জিজ্ঞাসা করুন, এই শ্রেণীর আসলেই কোনও ঘেরের উদাহরণ প্রয়োজন? উত্তরটি যদি না হয় তবে এটি তৈরি করুন static
। অভ্যন্তরীণ ক্লাসগুলি কখনও কখনও দরকারী, তবে তারা সহজেই এমন জটিলতাগুলি প্রবর্তন করতে পারে যা একটি প্রোগ্রাম বোঝা শক্ত করে তোলে। জেনেরিক (ধাঁধা 89), প্রতিবিম্ব (ধাঁধা 80) এবং উত্তরাধিকার (এই ধাঁধা) এর সাথে তাদের জটিল মিথস্ক্রিয়া রয়েছে । আপনি যদি ঘোষণা Inner1
করেন static
, সমস্যাটি চলে যায়। আপনার কাছে ঘোষণা তাহলে Inner2
হতে static
, আপনি আসলে বুঝতে পারেন কি প্রোগ্রাম আছে: একটা চমৎকার বোনাস প্রকৃতপক্ষে।
সংক্ষেপে, একটি শ্রেণীর পক্ষে অন্তঃশ্রেণী এবং অন্যের একটি উপশ্রেণী উভয়ই হওয়া খুব কমই উপযুক্ত। আরও সাধারণভাবে, অভ্যন্তর শ্রেণি প্রসারিত করা খুব কমই উপযুক্ত; যদি আপনার অবশ্যই হয়, ঘেরের উদাহরণটি সম্পর্কে দীর্ঘ এবং কঠোরভাবে চিন্তা করুন। এছাড়াও, static
নেস্টেড ক্লাসগুলিকে নন-এর চেয়ে বেশি পছন্দ করুন static
। বেশিরভাগ সদস্যের ক্লাসগুলি ঘোষণা করা উচিত এবং করা উচিত static
।
আপনি যদি আগ্রহী হন তবে স্ট্যাক ওভারফ্লোতে এই উত্তরে ধাঁধা 90 এর আরও বিশদ বিশ্লেষণ সরবরাহ করা হবে ।
এটি লক্ষণীয় যে উপরেরটি মূলত জাভা ক্লাস এবং অবজেক্ট টিউটোরিয়ালে প্রদত্ত দিকনির্দেশনার একটি বর্ধিত সংস্করণ :
যদি আপনার কোনও সংযুক্তকরণের অ-সর্বজনীন ক্ষেত্র এবং পদ্ধতিতে অ্যাক্সেসের প্রয়োজন হয় তবে একটি অ স্থিত নেস্টেড ক্লাস (বা অভ্যন্তরীণ শ্রেণি) ব্যবহার করুন। আপনার যদি এই অ্যাক্সেসের প্রয়োজন না হয় তবে একটি স্থিত নেস্টেড ক্লাস ব্যবহার করুন।
সুতরাং, টিউটোরিয়াল অনুসারে আপনি অন্য কথায় যে প্রশ্নটি জিজ্ঞাসা করেছেন তার উত্তর হ'ল অনাস্থা ব্যবহারের একমাত্র দৃ reason় কারণ হ'ল যখন কোনও ঘেরের উদাহরণের অ-সর্বজনীন ক্ষেত্র এবং পদ্ধতিতে অ্যাক্সেস প্রয়োজন হয় ।
টিউটোরিয়াল শব্দবন্ধ কিছুটা বিস্তৃত (এটি কারণ হতে পারে জাভা পাজলরা এটিকে জোরদার করার চেষ্টা করে এবং এটি সঙ্কুচিত করার চেষ্টা করে)। বিশেষত, সরাসরি বদ্ধ দৃষ্টিকোণ ক্ষেত্রগুলিতে অ্যাক্সেস করা আমার অভিজ্ঞতাতে কখনই প্রয়োজন হয় নি the এই অর্থে যে কনস্ট্রাক্টর / পদ্ধতির পরামিতি হিসাবে এগুলি পাস করার মতো বিকল্প উপায়গুলি সর্বদা ডিবাগ এবং রক্ষণাবেক্ষণের পক্ষে সহজ হয়ে যায়।
সামগ্রিকভাবে, আমার (বেশ বেদনাদায়ক) সরাসরি ভিতরের শ্রেণীর ডিবাগ উদাহরণস্বরূপ পরিক্ষেপ ক্ষেত্র অ্যাক্সেস সাথে সংঘর্ষে শক্তিশালী ছাপ যে এই অভ্যাস বর্ণনার অনুরূপ, গ্লোবাল রাষ্ট্রের ব্যবহার সহ প্রণীত পরিচিত খারাপ এর সাথে জড়িত।
অবশ্যই, জাভা এটি এমনভাবে তৈরি করেছে যাতে এই জাতীয় "কোয়াটি গ্লোবাল" এর ক্ষতি ঘেরের ক্লাসের মধ্যেই অন্তর্ভুক্ত থাকে তবে যখন আমাকে নির্দিষ্ট অভ্যন্তরীণ শ্রেণীর ডিবাগ করতে হয়েছিল, তখন মনে হয়েছিল যে এই জাতীয় ব্যান্ড সাহায্য ব্যথা হ্রাস করতে সহায়তা করে নি: আমার এখনও ছিল নির্দিষ্ট বিদেশী বিষয়টির বিশ্লেষণে পুরোপুরি মনোনিবেশ করার পরিবর্তে "বিদেশী" শব্দার্থবিজ্ঞান এবং বিশদটি মাথায় রাখার জন্য।
সম্পূর্ণতার জন্য, এমন কেস থাকতে পারে যেখানে উপরের যুক্তি প্রয়োগ হয় না। উদাহরণস্বরূপ, আমার ম্যাপ.কিসেট জাভাদোকগুলি পড়ার জন্য , এই বৈশিষ্ট্যটি দৃ tight় সংযোগের পরামর্শ দেয় এবং ফলস্বরূপ, অ স্থিত শ্রেণীর বিরুদ্ধে তর্কগুলি অকার্যকর করে দেয়:
Set
এই মানচিত্রে থাকা কীগুলির একটি দর্শন ফিরিয়ে দেয় । সেটটি মানচিত্রে সমর্থনযুক্ত, সুতরাং মানচিত্রে পরিবর্তনগুলি সেটে প্রতিফলিত হয় এবং বিপরীতে ...
উপরেরটি কোনওভাবে আপনার মনে ধরে রাখতে, পরীক্ষা করতে এবং ডিবাগ করতে কোডটিকে সহজতর করে তুলবে না তবে এটি অন্তত কোনওটিকে তর্ক করতে পারে যে জটিলতা মেলে / উদ্দেশ্যমূলক কার্যকারিতা দ্বারা ন্যায়সঙ্গত।