কালেকশন.ইম্পটিলিস্ট () এবং সংগ্রহের মধ্যে পার্থক্য কী EM EMPTY_LIST


105

জাভাতে, আমাদের কাছে সংগ্রহে.অম্পটিলিস্ট () এবং সংগ্রহ রয়েছে EM EMPTY_LIST । উভয়ের একই সম্পত্তি রয়েছে:

খালি তালিকা দেয় (অপরিবর্তনীয়)। এই তালিকাটি সিরিয়ালযোগ্য।

সুতরাং এক বা অন্য ব্যবহারের মধ্যে সঠিক পার্থক্য কি?

উত্তর:


130
  • Collections.EMPTY_LIST একটি পুরানো শৈলী ফেরত List
  • Collections.emptyList() টাইপ-ইনফারেন্স ব্যবহার করে এবং তাই প্রত্যাবর্তন করে List<T>

সংগ্রহ.এম্পটিলিস্ট () জাভা 1.5 তে যুক্ত করা হয়েছিল এবং এটি সম্ভবত সর্বদা পছন্দনীয় । এইভাবে, আপনাকে আপনার কোডের মধ্যে অপ্রয়োজনীয়ভাবে কাস্ট করার দরকার নেই।

Collections.emptyList()অভ্যন্তরীণভাবে আপনার জন্য castালাই না ।

@SuppressWarnings("unchecked")
public static final <T> List<T> emptyList() {
    return (List<T>) EMPTY_LIST;
}

1
আমি এর মধ্যে 100% নির্দিষ্ট নই, তবে আমি বিশ্বাস করি যে টাইপ করা সংস্করণ (EMPTY_LIST / EMPTY_SET / EMPTY_MAP) ব্যবহার / ফিরিয়ে দেওয়ার কারণে প্রদত্ত কল চেইনের মধ্যে জেনেরিক প্রকারের চেক করতে সংকলককে ছেড়ে দিতে হবে। এটি মূলত পরিসংখ্যান করে যে এটি জেনেরিক ধরণের অভাব সহ পুরানো কোডে ঘুরে গেছে এবং ছেড়ে দেয়।
ম্যাট প্যাসেল

18

উত্স পেতে দিন:

 public static final List EMPTY_LIST = new EmptyList<>();

এবং

@SuppressWarnings("unchecked")
public static final <T> List<T> emptyList() {
    return (List<T>) EMPTY_LIST;
}

13

তারা একেবারে সমান বস্তু।

public static final List EMPTY_LIST = new EmptyList<>();

public static final <T> List<T> emptyList() {
    return (List<T>) EMPTY_LIST;
}

একমাত্র হ'ল emptyList()জেনেরিক ফিরিয়ে দেয় List<T>, তাই আপনি কোনও তালিকা ছাড়াই জেনেরিক সংগ্রহের জন্য এই তালিকাটি নির্ধারণ করতে পারেন।


13

অন্য কথায়, EMPTY_LIST নিরাপদ টাইপ নয়:

  List list = Collections.EMPTY_LIST;
  Set set = Collections.EMPTY_SET;
  Map map = Collections.EMPTY_MAP;

তুলনামুলকভাবে:

    List<String> s = Collections.emptyList();
    Set<Long> l = Collections.emptySet();
    Map<Date, String> d = Collections.emptyMap();
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.