আমার ইউটিলিটি ফাংশনে পূর্ণ ক্লাস রয়েছে। এর কোনও উদাহরণ ইনস্ট্যান্ট করা কোনও অর্থবোধের অর্থ দেয় না, তবে আমি এখনও এর পদ্ধতিগুলি কল করতে চাই। এটি মোকাবেলার সেরা উপায় কী? স্ট্যাটিক ক্লাস? সারাংশ?
আমার ইউটিলিটি ফাংশনে পূর্ণ ক্লাস রয়েছে। এর কোনও উদাহরণ ইনস্ট্যান্ট করা কোনও অর্থবোধের অর্থ দেয় না, তবে আমি এখনও এর পদ্ধতিগুলি কল করতে চাই। এটি মোকাবেলার সেরা উপায় কী? স্ট্যাটিক ক্লাস? সারাংশ?
উত্তর:
চূড়ান্ত হিসাবে চিহ্নিত ক্লাসে ব্যক্তিগত নির্মাতা এবং স্থির পদ্ধতি।
দুর্দান্ত বই "কার্যকর জাভা" অনুসারে :
আইটেম 4: একটি প্রাইভেট কনস্ট্রাক্টরের সাথে অযোগ্যতা প্রয়োগ করুন
- শ্রেণীর বিমূর্ততা তৈরি করে অযোগ্যতা প্রয়োগের প্রচেষ্টা কার্যকর হয় না।
- একটি ডিফল্ট কনস্ট্রাক্টর কেবল তখনই উত্পন্ন হয় যখন কোনও শ্রেণীর মধ্যে সুস্পষ্ট নির্মাতারা নেই, তাই কোনও প্রাইভেট কনস্ট্রাক্টরকে অন্তর্ভুক্ত করে একটি শ্রেণি অবিচ্ছেদ্যযোগ্য করা যায়:
// Noninstantiable utility class
public class UtilityClass
{
// Suppress default constructor for noninstantiability
private UtilityClass() {
throw new AssertionError();
}
}
স্পষ্টত নির্মাণকারী ব্যক্তিগত থাকার কারণে এটি শ্রেণীর বাইরেও অ্যাক্সেসযোগ্য। AssertionError কঠোরভাবে প্রয়োজন হয় না, তবে দুর্ঘটনাক্রমে ক্লাসের মধ্যে থেকে কনস্ট্রাক্টরকে অনুরোধ করা হলে এটি বীমা সরবরাহ করে। এটি গ্যারান্টি দেয় যে ক্লাসটি কখনই কোনও পরিস্থিতিতে তাত্ক্ষণিকভাবে চলবে না। এই প্রতিবাদটি হালকাভাবে পাল্টে দেওয়া যায় না, কারণ নির্মাতাকে স্পষ্টভাবে সরবরাহ করা হয় যাতে এটি চাওয়া যায় না। উপরোক্ত মতামত হিসাবে একটি মন্তব্য অন্তর্ভুক্ত করা বুদ্ধিমানের কাজ।
পার্শ্ব প্রতিক্রিয়া হিসাবে, এই প্রতিমাটি ক্লাসটিকে সাবক্ল্যাস করা হতে বাধা দেয়। সমস্ত কনস্ট্রাক্টরকে অবশ্যই একটি সুপারক্লাস কনস্ট্রাক্টরকে স্পষ্টভাবে বা স্পষ্টভাবে প্রার্থনা করতে হবে এবং একটি সাবক্লাসের কাছে প্রার্থনা করার জন্য কোনও অ্যাক্সেসযোগ্য সুপারক্লাস নির্মাণকারী নেই।
AssertionError
মত অন্যান্য বিকল্প উপর IllegalStateException
, UnsupportedOperationException
, ইত্যাদি?
আপনার মতামত java.lang.Math এর মতো একটি ইউটিলিটি ক্লাস রয়েছে ।
সেখানে প্রাইভেট কনস্ট্রাক্টর এবং স্থির পদ্ধতি সহ চূড়ান্ত শ্রেণি রয়েছে।
তবে পরীক্ষার জন্য এটি কী করে তা থেকে সাবধান থাকুন, আমি এই নিবন্ধটি পড়ার পরামর্শ দিচ্ছি
স্ট্যাটিক পদ্ধতিগুলি টেস্টেবলির মৃত্যুর Death
কেবল উজানে সাঁতার কাটতে অচল সদস্য এবং ক্লাসগুলি ওওতে অংশ নেয় না এবং তাই তারা খারাপ। না, দুষ্ট নয়, তবে গুরুত্ব সহকারে, আমি অ্যাক্সেসের জন্য একটি সিঙ্গলটন প্যাটার্ন সহ একটি নিয়মিত ক্লাসের পরামর্শ দেব। এইভাবে যদি আপনাকে রাস্তায় কোনও ক্ষেত্রে আচরণকে ওভাররাইড করতে হয় তবে এটি কোনও বড় পুনর্নির্মাণ নয়। ওও আপনার বন্ধু :-)
আমার 0 .02
"ব্যক্তিগত নির্মাণকারী" যুক্তিগুলিতে মন্তব্য করুন: আসুন, বিকাশকারীরা যে বোকা নয়; তবে তারা অলস। একটি অবজেক্ট তৈরি করে তারপর স্থির পদ্ধতি কল? হবে না।
আপনার ক্লাসের অপব্যবহার করা যাবে না তা নিশ্চিত করার জন্য খুব বেশি সময় ব্যয় করবেন না। আপনার সহকর্মীদের জন্য কিছু বিশ্বাস আছে। এবং আপনার শ্রেণীর অপব্যবহারের জন্য সর্বদা একটি উপায় রয়েছে আপনি এটি কীভাবে রক্ষা করেন তা নয়। শুধুমাত্র যে জিনিসটির অপব্যবহার করা যায় না তা হ'ল সম্পূর্ণ অকেজো।
ক্লাস হিসাবে ঘোষণার কোন মানে নেই static
। কেবল এর পদ্ধতিগুলি ঘোষণা static
করুন এবং শ্রেণীর নাম থেকে তাদের জাভা ম্যাথের ক্লাসের মতো স্বাভাবিক হিসাবে কল করুন ।
এছাড়াও, যদিও কন্সট্রাক্টরকে ব্যক্তিগত করা কঠোরভাবে প্রয়োজনীয় নয়, এটি করা ভাল ধারণা। কনস্ট্রাক্টরকে ব্যক্তিগত হিসাবে চিহ্নিত করা অন্য লোককে আপনার শ্রেণীর উদাহরণ তৈরি করতে বাধা দেয়, তারপরে সেই উদাহরণগুলি থেকে স্থির পদ্ধতিগুলি কল করে calling (এই কলগুলি জাভাতে ঠিক একইভাবে কাজ করে, তারা কেবল আপনার কোডের পঠনযোগ্যতাকে বিভ্রান্ত করছে এবং আঘাত করছে))
আপনি লম্বক https://projectlombok.org/features/experimental/UtilClass থেকে @ ইউটিলিটি ক্লাস টীকাটি ব্যবহার করতে পারেন