Compile-Time এবং Runtime এ Generics এর ভূমিকা

Type Erasure এবং Generics - জাভা জেনেরিক্স (Java Generics) - Java Technologies

338

জাভা জেনেরিক্স মূলত টাইপ সেফটি নিশ্চিত করার জন্য ডিজাইন করা হয়েছে এবং এর প্রধান প্রভাব compile-time এ দেখা যায়। তবে runtime এ Generics-এর আচরণ কিছুটা ভিন্ন, কারণ জাভা Generics টাইপ ইরেজার (type erasure) নামে একটি প্রক্রিয়া ব্যবহার করে।


Compile-Time এ Generics এর ভূমিকা

  1. টাইপ সেফটি নিশ্চিত করা:

    • Generics কম্পাইল টাইমে টাইপ চেকিং সম্পন্ন করে। ফলে ডেটা টাইপ সম্পর্কিত ত্রুটি (type mismatch errors) কম্পাইল টাইমেই ধরা যায়।
    • এটি কোডকে আরও নির্ভুল এবং নিরাপদ করে তোলে।

    উদাহরণ:

    import java.util.ArrayList;
    import java.util.List;
    
    public class Main {
        public static void main(String[] args) {
            List<String> list = new ArrayList<>();
            list.add("Java");
            list.add(10); // Compile-time error
        }
    }
    

    ত্রুটি বার্তা:

    incompatible types: int cannot be converted to String
    
  2. টাইপ কাস্টিং এর প্রয়োজনীয়তা দূর করা:

    • Generics ব্যবহারের ফলে টাইপ কাস্টিং করার দরকার হয় না। এটি কোডকে সহজ করে এবং runtime errors কমায়।

    উদাহরণ:

    import java.util.ArrayList;
    import java.util.List;
    
    public class Main {
        public static void main(String[] args) {
            List<String> list = new ArrayList<>();
            list.add("Generics");
    
            String item = list.get(0); // No casting needed
            System.out.println(item);
        }
    }
    
  3. কোড পুনর্ব্যবহারযোগ্যতা (Code Reusability):
    • Generics ক্লাস এবং মেথড বিভিন্ন টাইপের ডেটার জন্য ব্যবহার করা যায়।

Runtime এ Generics এর ভূমিকা

জাভার type erasure এর কারণে runtime এ Generics এর টাইপ ইনফরমেশন মুছে ফেলা হয়। ফলে Generics এর টাইপ সম্পর্কিত বেশিরভাগ তথ্য compile-time এ সীমাবদ্ধ থাকে।

Runtime এর ভূমিকা:

  1. Type Erasure:

    • Generics এর টাইপ ইনফরমেশন runtime এ ইরেজ হয়ে যায়।
    • এর ফলে JVM শুধুমাত্র raw টাইপের উপর কাজ করে।

    উদাহরণ:

    import java.util.ArrayList;
    import java.util.List;
    
    public class Main {
        public static void main(String[] args) {
            List<String> stringList = new ArrayList<>();
            List<Integer> intList = new ArrayList<>();
    
            System.out.println(stringList.getClass() == intList.getClass()); // true
        }
    }
    

    আউটপুট:

    true
    

    ব্যাখ্যা:
    Compile-time এ List<String> এবং List<Integer> আলাদা মনে হলেও, runtime এ List এর টাইপ ইরেজ হয়ে যায়। তাই একই ক্লাস টাইপ হিসেবে দেখা যায়।

  2. Type Safety Runtime এ প্রয়োগ হয় না:

    • Generics runtime এ টাইপ চেক করতে পারে না। এটি compile-time এর কাজ।
    • runtime এ টাইপ চেকিং এর জন্য instanceof কাজ করে না।

    উদাহরণ:

    import java.util.ArrayList;
    
    public class Main {
        public static void main(String[] args) {
            ArrayList<String> list = new ArrayList<>();
            if (list instanceof ArrayList<String>) { // Compile-time error
                System.out.println("This will not compile");
            }
        }
    }
    
  3. Backward Compatibility:

    • Generics এর টাইপ ইরেজারের কারণে জাভার পুরনো (non-generic) কোডের সাথে Compatibility বজায় থাকে।
    • Generics ব্যবহার করলে পুরনো raw টাইপ ডেটার সাথে কাজ করানো সম্ভব।

    উদাহরণ:

    import java.util.ArrayList;
    
    public class Main {
        public static void main(String[] args) {
            ArrayList list = new ArrayList(); // Raw type
            list.add("Java");
            list.add(10);
    
            for (Object obj : list) {
                System.out.println(obj);
            }
        }
    }
    

    আউটপুট:

    Java
    10
    

Compile-Time এবং Runtime এর তুলনা

বৈশিষ্ট্যCompile-TimeRuntime
টাইপ চেকিংGenerics টাইপ চেকিং সম্পন্ন করে।টাইপ ইনফরমেশন মুছে ফেলা হয়।
টাইপ ইনফরমেশনGenerics টাইপের তথ্য দৃশ্যমান থাকে।টাইপ ইরেজার এর কারণে অদৃশ্য।
টাইপ সেফটিটাইপ সেফটি নিশ্চিত করে।টাইপ সেফটি runtime এ প্রযোজ্য নয়।
Backward CompatibilityCompile-Time এ নিশ্চিত।Runtime এ পুরনো কোড সাপোর্ট করে।

  • Compile-Time: জেনেরিক্স টাইপ চেকিং, টাইপ সেফটি এবং টাইপ কাস্টিং এড়িয়ে কোড সহজ করে।
  • Runtime: টাইপ ইরেজারের কারণে Generics-এর কার্যক্ষমতা সীমিত, তবে এটি জাভার backward compatibility বজায় রাখতে সাহায্য করে।

Generics মূলত compile-time টাইপ নিরাপত্তা নিশ্চিত করতে এবং runtime এ কার্যক্ষমতার সাথে পুরনো কোডের সামঞ্জস্য বজায় রাখতে গুরুত্বপূর্ণ ভূমিকা পালন করে।

Content added By
Promotion

Are you sure to start over?

Loading...