Collections.emptyList () और Collections.EMPTY_LIST के बीच क्या अंतर है


105

जावा में, हमारे पास Collections.emptyList () और Collections.EMPTY_LIST हैं । दोनों के पास समान संपत्ति है:

खाली सूची (अपरिवर्तनीय) लौटाता है। यह सूची क्रमबद्ध है।

तो एक या दूसरे का उपयोग करने के बीच सटीक अंतर क्या है?

जवाबों:


130
  • Collections.EMPTY_LIST एक पुरानी शैली देता है List
  • Collections.emptyList() टाइप-इनफेरेंस का उपयोग करता है और इसलिए रिटर्न करता है List<T>

Collections.emptyList () जावा 1.5 में जोड़ा गया था और यह शायद हमेशा बेहतर होता है । इस तरह, आपको अपने कोड के भीतर अनावश्यक रूप से डालने की आवश्यकता नहीं है।

Collections.emptyList()आंतरिक रूप से आपके लिए कास्ट करता है ।

@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();
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.