আমি কীভাবে বর্ননা করব, জাভাতে কোনও শ্রেণি অপরিবর্তনীয়?


14

আমি কীভাবে অপরিবর্তনীয় বস্তুগুলি কার্যকর তা নিয়ে আমি হোঁচট খেয়েছি এবং উদাহরণস্বরূপ যদি আপনি কোনও কনস্ট্রাক্টরের কাছে উপাদানগুলি পাস করেন এবং আপনার শ্রেণিটি অপরিবর্তনীয় হতে পারে তবে এই উপাদানগুলি নিজেরাই অপরিবর্তনীয় না হলে আপনাকে অনুলিপি করতে হবে।

এটির জন্য আমার প্রকল্প সম্পর্কে প্রচুর চেকিং বা জ্ঞান প্রয়োজন, কারণ যদি আমার কাছে থাকে

public A(B foo)

এবং Bপরিবর্তনযোগ্য নয়, Aআমাকে অনুলিপি করতে হবে B। এখন কল্পনা করুন Bঅচল মনে হচ্ছে তবে কনস্ট্রাক্টর নিজে থেকেই মিউটেবল ক্লাস রয়েছে।

জাভাতে কোনও শ্রেণি অপরিবর্তনীয় হলে ডকুমেন্টিংয়ের জন্য কি কোনও মানক বা সেরা অনুশীলন রয়েছে? @immutableজাভাদোকের কোনও কীওয়ার্ড নেই বলে মনে হচ্ছে ।

@Immutable টীকা কিছু সম্পূর্ণভাবে এবং স্বয়ংক্রিয় বর্গ প্রজন্মের জন্য বিভিন্ন মান জাভা অংশ নয় বলে মনে হয়।


2
প্রথমত, ডিফেন্সিভ অনুলিপি আপনাকে এটির কাছাকাছি যেতে দেয়। দ্বিতীয়ত, এটি নথিভুক্ত করার
উপায়টি

"এটি নথিভুক্ত করার উপায়টি ক্লাস জাভাদোক" এটি করার কোনও মানক উপায় আছে কি? তাহলে এটি ইতিমধ্যে গৃহীত উত্তর হবে।
অউফজিহভোগেল

@ raptortech97 অপরিবর্তনীয় শ্রেণির অন্যতম প্রধান সুবিধা হ'ল প্রতিরক্ষামূলক অনুলিপি করার দরকার নেই । যদি কোনও অভিযুক্ত অপরিবর্তনীয় বস্তুর প্রতিরক্ষামূলক অনুলিপি করতে হয় তবে আপনি এটি ভুল করছেন।
itbruce

1
@itsbruce তিনি পরিবর্তনীয় জিনিসগুলি অনুলিপি করার বিষয়ে কথা বলছিলেন। এছাড়াও, একটি অপরিবর্তনীয় বস্তু অনুলিপি করার একটি কারণ রয়েছে - ক্যাশে লোকাল। কিছু আবর্জনা সংগ্রহকারী অবজেক্টের আপেক্ষিক ক্রম সংরক্ষণ করে, তাই একসাথে বরাদ্দ করা বস্তুগুলি একসাথে থাকে।
ডোভাল

তুমি ঠিক বলছো. আমার খারাপ।
itbruce

উত্তর:


7

Stringক্লাসের ডকুমেন্টেশনের দিকে তাকানো (সাহসী পাঠ্যটি আমি এমন কিছু করেছি):

স্ট্রিং ক্লাস চরিত্রের স্ট্রিংগুলি উপস্থাপন করে। জাভা প্রোগ্রামগুলিতে সমস্ত স্ট্রিং লিটারেল যেমন "এবিসি" এই শ্রেণীর উদাহরণ হিসাবে প্রয়োগ করা হয়। স্ট্রিংগুলি ধ্রুবক; তারা তৈরির পরে তাদের মানগুলি পরিবর্তন করা যায় না। স্ট্রিং বাফারগুলি পরিবর্তনীয় স্ট্রিং সমর্থন করে। স্ট্রিং অবজেক্টগুলি অপরিবর্তনীয় কারণ এগুলি ভাগ করা যায়।

আপনি দেখতে পাচ্ছেন যে এখানে কোনও নির্দিষ্ট লেবেলিং বা অন্যান্য চিহ্নিতকারী নেই, তবে তারা জাভাডকে ক্লাসটি বর্ণনা করে যা Stringক্লাসটি একটি ধ্রুবক, অপরিবর্তনীয় বস্তুর প্রতিনিধিত্ব করে।

সুতরাং, ধরে নিই যে আপনি এই অরাকল টিউটোরিয়ালে প্রদত্ত নির্দেশাবলীর অনুসরণ করেছেন একটি অপরিবর্তনীয় শ্রেণি তৈরি করার জন্য, শ্রেণীর অপরিবর্তনীয়তা নথিভুক্ত রয়েছে তা নিশ্চিত করার জন্য, আপনার কেবল এটি নিশ্চিত করা উচিত যে আপনি এটিতে ক্লাসের বর্ণনাকারী জাভাডকটিতে উল্লেখ করেছেন এবং এটি কী আছে।

যদি এখনও আপনার যা প্রয়োজন অনুসারে না করে, আপনি কিভাবে আপনি কাস্টম JavaDoc ট্যাগ নির্মান করতে পারে কটাক্ষপাত করা যেতে পারে এখানে


4

আপনি টিকা ব্যবহার করতে পারেন:

@ javax.annotation.concurrent.Immutable থেকে JSR-305

বা @ নেট.jcip.annotations . অনুশীলনে জাভা কনকুরেন্সি থেকে পরিবর্তনযোগ্য


2
এই দুজনের মধ্যে কোনটি ভাল / প্রস্তাবিত?
টাউটভিস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.