কম্পিউটার টিউটোরিয়াল

জাভাতে ArrayList কে ArrayList এবং বিপরীত রূপান্তর

জাভা জেনেরিক্সে টাইপ ইরেজার (Type Erasure) কারণে রানটাইমে ArrayList এবং ArrayList একই টাইপ। কিন্তু কম্পাইল টাইমে টাইপ সেফ্টির জন্য এগুলো আলাদা। কনভার্সনের জন্য Wildcard (?) ব্যবহার করা হয়।

১. ArrayList<String> → ArrayList<Object> (Upcasting via Wildcard)

ArrayList (Unbounded Wildcard) ব্যবহার করে টাইপ চেক বাইপাস করা যায়।

উদাহরণ

import java.util.ArrayList;
import java.util.Iterator;

public class ArrayListExample {
    public static void main(String args[]) {
        // Object টাইপের ArrayList
        ArrayList<Object> list = new ArrayList<Object>();
        list.add("apples");
        list.add("mangoes");
        list.add("oranges");

        // String টাইপে কনভার্ট (Unchecked Cast - Warning আসবে)
        @SuppressWarnings("unchecked")
        ArrayList<String> stringList = (ArrayList<String>)(ArrayList<?>)(list);
        
        // কন্টেন্ট প্রিন্ট
        Iterator<String> it = stringList.iterator();
        while(it.hasNext()) {
            System.out.println(it.next());
        }
    }
}

আউটপুট

apples
mangoes
oranges

সতর্কতা: এটি Unchecked Cast। যদি list-এ স্ট্রিং বাদে অন্য টাইপের অবজেক্ট থাকে, তবে রানটাইমে ClassCastException হবে। কম্পাইলার ওয়ার্নিং দেবে।

২. ArrayList<Object> → ArrayList<String> (Downcasting - সেফ নয়)

সাধারণত এটি করা উচিত নয়, কারণ ArrayList-এ যেকোনো অবজেক্ট থাকতে পারে। কিন্তু যদি নিশ্চিত হোন যে শুধু স্ট্রিং আছে, তবে:

উদাহরণ

ArrayList<String> stringList = new ArrayList<>();
stringList.add("apples");
stringList.add("mangoes");

// String List কে Object List এ (Implicit Upcast - Safe)
ArrayList<Object> objectList = new ArrayList<>(stringList); // Copy Constructor

// Object List কে String List এ (Explicit Downcast - Unsafe)
@SuppressWarnings("unchecked")
ArrayList<String> backToString = (ArrayList<String>)(ArrayList<?>)objectList;

ভালো প্র্যাকটিস: টাইপ সেফ কনভার্সন (Stream API - Java 8+)

র─── রানটাইম এরর এড়াতে স্ট্রিম ব্যবহার করে নতুন লিস্ট বানান:

// Object List → String List (Safe, New List)
ArrayList<Object> objList = new ArrayList<>(Arrays.asList("a", "b", 123)); // Mixed!
ArrayList<String> strList = objList.stream()
    .filter(e -> e instanceof String)
    .map(e -> (String) e)
    .collect(Collectors.toCollection(ArrayList::new));

// String List → Object List (Always Safe)
ArrayList<Object> objList2 = new ArrayList<>(strList); // Implicit widening

সারসংক্ষেপ: র‍стат করলে ওয়ার্নিং দবায় @SuppressWarnings("unchecked")। প্রোডাকশন কোডে স্ট্রিম/ফিল্টার ব্যবহার করে টাইপ সেফ কনভার্সন করুন।

  1. জাভাতে toString() ব্যবহার করে সংখ্যার স্ট্রিং রিপ্রেজেন্টেশন পেতে

  2. জাভাতে String কে InputStream অবজেক্টে রূপান্তর করা

  3. পাইথনে স্ট্রিং ইভ্যালুয়েট করে অবজেক্ট রিটার্ন কীভাবে করবেন?

  4. পাইথন ডিকশনারিকে স্ট্রিংয়ে সিরিয়ালাইজ করা এবং বিপরীত