কম্পিউটার

জাভাতে ক্লোন() পদ্ধতির গুরুত্ব?


clone() পদ্ধতিটি একটি ক্লাসের একটি বস্তুর একটি অনুলিপি তৈরি করতে ব্যবহৃত হয় যা ক্লোনযোগ্য প্রয়োগ করে ইন্টারফেস. ডিফল্টরূপে, এটি ক্ষেত্র-দ্বারা-ক্ষেত্র অনুলিপি করে যেহেতু অবজেক্ট ক্লাসের নির্দিষ্ট ক্লাসের সদস্যদের সম্পর্কে কোন ধারণা নেই যার অবজেক্টগুলি এই পদ্ধতিটিকে বলে। সুতরাং, যদি ক্লাসে শুধুমাত্র আদিম ডেটা টাইপ সদস্য থাকে তবে অবজেক্টের একটি নতুন অনুলিপি তৈরি করা হবে এবং নতুন অবজেক্ট কপির রেফারেন্স ফেরত দেওয়া হবে। কিন্তু, যদি ক্লাসে যেকোন শ্রেণীর সদস্য থাকে তবে শুধুমাত্র সেই সদস্যদের অবজেক্ট রেফারেন্স কপি করা হয় এবং তাই মূল অবজেক্ট এবং ক্লোন করা অবজেক্ট উভয়ের মেম্বার রেফারেন্স একই বস্তুকে নির্দেশ করে।

আমরা একটি CloneNotSupportedException পাব যদি আমরা clone() কল করার চেষ্টা করি একটি ক্লাসের একটি বস্তুর পদ্ধতি যা ক্লোনযোগ্য বাস্তবায়ন করে না ইন্টারফেস. এই ইন্টারফেসটি একটি মার্কার ইন্টারফেস এবং এই ইন্টারফেসের বাস্তবায়ন সহজভাবে নির্দেশ করে যে Object.clone() মেথড ইমপ্লিমেন্টিং ক্লাসের অবজেক্টে কল করা যেতে পারে।

সিনট্যাক্স

protected Object clone() throws CloneNotSupportedException

আমরা ক্লোন() পদ্ধতি দুটি উপায়ে বাস্তবায়ন করতে পারি

অগভীর অনুলিপি

এটি Object.clone() দ্বারা প্রদত্ত ডিফল্ট ক্লোনিং কার্যকারিতার ফলাফল পদ্ধতি যদি ক্লাসে অ-আদিম ডেটা টাইপ সদস্যও থাকে। শ্যালো কপির ক্ষেত্রে, ক্লোন করা বস্তুটি একই বস্তুকেও নির্দেশ করে যেটি মূল বস্তুটি উল্লেখ করে শুধুমাত্র বস্তুর উল্লেখগুলি অনুলিপি করা হয় এবং উল্লেখিত বস্তুগুলি নয়৷

উদাহরণ

public class ShallowCopyTest {
   public static void main(String args[]) {
      A a1 = new A();
      A a2 = (A) a1.clone();
      a1.sb.append("Tutorialspoint!");
      System.out.println(a1);
      System.out.println(a2);
   }
}
class A implements Cloneable {
   public StringBuffer sb = new StringBuffer("Welcome to ");
      public String toString() {
         return sb.toString();
      }
   public Object clone() {
      try {
         return super.clone();
      } catch(CloneNotSupportedException e) {
      }
      return null;
   }
}

আউটপুট

Welcome to Tutorialspoint!
Welcome to Tutorialspoint!


ডিপ কপি

আমাদের clone() ওভাররাইড করতে হবে ডিপ কপি অর্জনের জন্য নন-প্রিমিটিভ টাইপ সদস্যদের ক্লাসের পদ্ধতি যেহেতু এটি সদস্য বস্তুগুলিকেও ক্লোন করতে হবে, যা ডিফল্ট ক্লোনিং প্রক্রিয়া দ্বারা করা হয় না৷

উদাহরণ

public class DeepCopyTest {
   public static void main(String args[]) {
      A a1 = new A();
      A a2 = (A) a1.clone();
      a1.sb.append(" TutorialsPoint!");
      System.out.println(a1);
      System.out.println(a2);
   }
}
class A implements Cloneable {
   public StringBuffer sb = new StringBuffer("Welcome to ");
   public String toString() {
      return sb.toString();
   }
   public Object clone() {
      try {
         A a = (A) super.clone();
         a.sb = new StringBuffer(sb.toString());
         return a;
      }
      catch(CloneNotSupportedException e) {
      }
      return null;
   }
}

আউটপুট

Welcome to TutorialsPoint!
Welcome to

  1. C# এ ক্লোন() পদ্ধতি

  2. জাভাতে থ্রেড ক্লাসের join() পদ্ধতি

  3. জাভা প্রোগ্রামিং-এ থ্রেড ক্লাসের isAlive() পদ্ধতি

  4. জাভা 9 এ DestroForcibly() পদ্ধতির গুরুত্ব?