2012-09-22 22 views
20

में खाली अज्ञात आंतरिक वर्ग मैं the Guava library में देख रहा था और मैं TypeToken में एक खाली अज्ञात आंतरिक कक्षा में आया था।जावा

TypeToken<List<String>> stringListTok = new TypeToken<List<String>>() {}; 

वास्तव में क्या खाली गुमनाम आंतरिक वर्ग का प्रयोग होता है और जहां यह सहायक हो सकता है उपयोगी परिदृश्यों क्या हैं?

उत्तर

32

इसका उद्देश्य TypeTokenसुपर क्लास उदाहरण के को खोजने के लिए अनुमति देने के लिए है - जो कि तर्क तर्क जानकारी को संरक्षित रखेगा।

उदाहरण के लिए, हालांकि एक ArrayList<String> वस्तु नहीं जानता है कि कि अपनी तत्व प्रकार विलोपन के कारण String है, सुपर क्लास जानकारी नहीं खो दिया है, इसलिए new ArrayList<String>{} जानता है कि अपनी सुपर क्लास ArrayList<String> ही नहीं, ArrayList है। TypeToken एक निर्मित जेनेरिक प्रकार का प्रतिनिधित्व करने के लिए उस तकनीक का उपयोग करता है।

+3

मैं कुछ समय के लिए 'टाइपटेकन' का उपयोग कर रहा हूं, लेकिन कभी भी सूक्ष्मता और चतुरता की सराहना नहीं करता। यह बहुत बढ़िया है – Ray

18

एक उपयोग है, जो गुवा का उपयोग कर सकता है। जैसा कि आप जानते हैं, संकलन के बाद प्रकार खो जाते हैं, लेकिन यदि वर्ग स्तर पर टाइप किया गया है, तो यह संकलन के बाद खो नहीं जाता है और इसे प्रतिबिंब द्वारा निकाला जा सकता है। मैं कोड को एक मिनट में निकालने के लिए रखूंगा।


संपादित अगर कोड किसी भी उपयोग की है मैं नहीं जानता, लेकिन यहाँ यह

public class Reflect { 

    public static void main(String[] args) { 
     Super<String> aStringSuper = new Super<String>() {}; 
     aStringSuper.method(); 

     Super<List<Integer>> aListSuper = new Super<List<Integer>>() {}; 
     aListSuper.method(); 
    } 

} 

class Super<T> { 

    public void method() { 
     Type genericSuperclass = this.getClass().getGenericSuperclass(); 
     ParameterizedType parameterizedType = (ParameterizedType) genericSuperclass; 
     for(Type type : parameterizedType.getActualTypeArguments()) { 
      System.out.println(type); 
     } 
    } 
} 
+0

टाइप टोकन के वास्तविक उपयोग की बात है। –