2011-06-02 7 views
17

के 'AS' कीवर्ड के समान है जैसा कि हम जानते हैं कि सी # एक एएस कीवर्ड प्रदान करता है जो स्वचालित रूप से एक जांच करता है कि ऑब्जेक्ट एक प्रकार का है या नहीं, तो यह तब तक रहता है आवश्यक प्रकार एक और शून्य देता है।क्या जावा में कोई कीवर्ड है जो सी #

public class User

{

}

....

Object obj = someObj;

User user = obj As User;

...

यहां उपरोक्त उदाहरण में, एक ऑब्जेक्ट obj प्रकार उपयोगकर्ता या किसी अन्य प्रकार का हो सकता है। उपयोगकर्ता या तो उपयोगकर्ता या शून्य के प्रकार का ऑब्जेक्ट प्राप्त करेगा। ऐसा इसलिए है क्योंकि सी # के कीवर्ड पहले चेक करते हैं और यदि संभव हो तो ऑब्जेक्ट का कास्टिंग परिणामी प्रकार पर करता है।

तो क्या जावा में कोई कीवर्ड है जो सी # के AS कीवर्ड के बराबर है?

+0

अच्छा सवाल हालांकि मुझे लगता है कि "जैसा" वास्तव में एक भयानक पैटर्न है - मैं बहुत अधिक कलाकारों का उपयोग करता हूं और अपवाद प्राप्त करता हूं (यानी। एक शोर विफलता जिसे आप ठीक कर सकते हैं) बदले में एक चुप रूपांतरण के बजाय जो आपको भविष्य में कुछ यादृच्छिक बिंदु पर काट सकता है ..... और यदि आप वास्तव में नहीं जानते कि कलाकार काम करने जा रहा है या नहीं, तो भी आप बाद में शून्य के लिए परीक्षण करना है ताकि आपने कोई टाइपिंग भी सहेजी न हो! – mikera

+2

आप अभी भी जावा के कास्टिंग की तरह इसे कास्ट कर सकते हैं। "एएस" डेवलपर द्वारा एक जानबूझकर पसंद है, "मैं नहीं चाहता कि उस कास्टिंग अपवाद, अगर यह सही प्रकार नहीं है तो मैं शून्य चाहता हूं" – Hounshell

उत्तर

23

आप एक सहायक विधि

public static T as(Object o, Class<T> tClass) { 
    return tClass.isInstance(o) ? (T) o : null; 
} 

User user = as(obj, User.class); 
+2

छोटी चीज - यह हैइन्सेंस की बजाय इंस्टेंस है –

+0

@ जेफ, धन्यवाद। –

+0

धन्यवाद पीटर ... आपके रास्ते से प्रयास करेगा। –

20

नहीं, तुम instanceof से सलाह ले सकते हैं और फिर अगर यह मेल खाता डाली

User user = null; 
if(obj instanceof User) { 
    user = (User) obj; 
} 
+0

मुझे लगता है कि आपका मतलब है 'एक्स उदाहरण यूजर', है ना? – templatetypedef

+0

हाँ, प्रश्न – jberg

+3

से मेल खाने के लिए इसे ठीक किया गया है लेकिन उदाहरण का उपयोग करना सी # के आईएस कीवर्ड का उपयोग करना है। –

11

कोई कीवर्ड बना सकते हैं, लेकिन पूर्णता के लिए मैं तुम्हें दे देंगे 1 -लाइनर समकक्ष:

User user = obj instanceof User ? (User) obj : null; 

(आपको स्पष्ट कलाकार नहीं होना चाहिए, मुझे यकीन नहीं है।)