2016-01-10 3 views
6

जेएलएस 8 cast expression में वर्णित AdditionalBound को को को लैम्ब्डा अभिव्यक्ति या विधि संदर्भ के लिए छोड़कर इस्तेमाल किया जा सकता है?कास्ट एक्सप्रेशन में अतिरिक्त बाउंड का उपयोग

यह कहा जाता है, यह हो सकता है कि:

(ReferenceType {AdditionalBound}) UnaryExpressionNotPlusMinus 

और कहा कि:

कास्टिंग संदर्भ का लक्ष्य प्रकार (§5.5) डाली अभिव्यक्ति है (द्वारा शुरू की गई .. ।) संदर्भ प्रकार टाइप और अतिरिक्त ऑपरउंड कास्ट ऑपरेटर में दिखाई देने वाले अंतरण प्रकार।

X x = (I1&I2) some_UnaryExpressionNotPlusMinus 

युपीडी:

लेकिन मैं गैर -lambda या गैर -method-संदर्भ उदाहरण के साथ व्यावहारिक उदाहरण खोजने में असफल रहा हूँ, कुछ की तरह कहते हैं विशेष रूप से, यह

जैसे कुछ की अनुमति देता है, जहां ~ यूनरी ऑपरेटर है।

मुझे नहीं पता कि X, I1, I2 और UnaryExpression इस मामले में क्या होना चाहिए।

युपीडी -2: @Jimmy टी के लिए धन्यवाद, वह

Object x = (Number&Serializable)~0; के व्यावहारिक उदाहरण सामने आए हैं।

लेकिन गैर-अनावश्यक उदाहरण देखना अच्छा लगेगा, जहां इस कास्टिंग का अर्थ है।

युपीडी-3:

Object l1 = (Collection & Iterable) new ArrayList<>(); 
    List l2 = (ByteList & Iterable) new ArrayList<>(); 
    Collection l3 = (List & Iterable) new ArrayList<>(); 

मामले में जहां इस तरह के कास्टिंग समझदार होगा कल्पना नहीं कर सकता: के ऊपर इन सभी भाव संकलित अनुसार, लेकिन उन सभी को कोई मतलब नहीं है।

उत्तर

4

यह संकलित किया जा सकता:

Object x = (Number&Serializable)~0; 

यह भी संकलित किया जा सकता:

void method() 
{ 
    method2((Number&Serializable)~0); 
} 

<T extends Number&Serializable> void method2(T x) 
{ 

} 

एक उदाहरण है, जहां कलाकारों वास्तव में जरूरत है:

void method(Object o) 
{ 
    method2((List&AutoCloseable)o); 
} 

<T extends List&AutoCloseable> void method2(T v) 
{ 

} 
+0

कूल, +1। लेकिन इस वर्ग कास्टिंग केस अनावश्यक है, कोई विचार जहां यह समझ में आता है? – Andremoniy

+1

एक विधि कॉल करते समय कास्टिंग अधिक समझ में आता है। –

+0

'method2 (~ 0); 'यहां भी काम करेगा – Andremoniy

संबंधित मुद्दे