2011-04-02 10 views
7
public boolean isUserControled(){  
     return action.getClass().getSuperclass().toString().equals("class logic.UserBehaviour"); 
} 

मुझे लगता है कि कोड का यह टुकड़ा सुंदर आत्म-स्पष्टीकरण है। क्या ऐसा करने का कोई अच्छा तरीका है?सुपर-क्लास

धन्यवाद

उत्तर

9

जब तक आप विशेष रूप से केवल बहुत पहले सुपर क्लास जाँच करना चाहते हैं, इसका इस्तेमाल करने के बेहतर होगा सबसे अच्छा विचार नहीं है।

या बेहतर अभी तक, Ulrik द्वारा पोस्ट की गई है:

action.getClass().getSuperClass() == logic.UserBehavior.class 
+0

"नाम बराबर" सख्ती से सही नहीं है। '==' के साथ सरल और बेहतर (देखें Ulrik का जवाब) – irreputable

+0

मैं सहमत हूं और इसके बारे में शुरुआत में नहीं था, (+1) उसका जवाब पहले से ही है। – Mat

11

(action instanceof logic.UserBehaviour) सच वापस आ जाएगी अगर कार्रवाई एक प्रकार है कि UserBehavior फैली का एक उद्देश्य है।

एक अंश http://download.oracle.com/javase/tutorial/java/nutsandbolts/op2.html

प्रकार तुलना ऑपरेटर

instanceof

instanceof ऑपरेटर एक निर्दिष्ट प्रकार के लिए एक वस्तु तुलना से। आप यह जांचने के लिए इसका उपयोग कर सकते हैं कि कोई ऑब्जेक्ट कक्षा का उदाहरण है, सबक्लास का उदाहरण, या का एक उदाहरण जो एक विशेष इंटरफ़ेस लागू करता है।

निम्नलिखित कार्यक्रम, InstanceofDemo, एक माता पिता के वर्ग (नाम जनक), एक सरल अंतरफलक ( MyInterface नाम), और एक बच्चे वर्ग ( बाल नाम) है कि माता-पिता से विरासत और इंटरफ़ेस लागू करता है परिभाषित करता है।

class InstanceofDemo { 
    public static void main(String[] args) { 

    Parent obj1 = new Parent(); 
    Parent obj2 = new Child(); 

    System.out.println("obj1 instanceof Parent: " + (obj1 instanceof Parent)); 
    System.out.println("obj1 instanceof Child: " + (obj1 instanceof Child)); 
    System.out.println("obj1 instanceof MyInterface: " + (obj1 instanceof MyInterface)); 
    System.out.println("obj2 instanceof Parent: " + (obj2 instanceof Parent)); 
    System.out.println("obj2 instanceof Child: " + (obj2 instanceof Child)); 
    System.out.println("obj2 instanceof MyInterface: " + (obj2 instanceof MyInterface)); 
    } 
} 

class Parent{} 
class Child extends Parent implements MyInterface{} 
interface MyInterface{} 

आउटपुट:

obj1 instanceof Parent: true 
obj1 instanceof Child: false 
obj1 instanceof MyInterface: false 
obj2 instanceof Parent: true 
obj2 instanceof Child: true 
obj2 instanceof MyInterface: true 

instanceof ऑपरेटर का उपयोग करते समय यह ध्यान रखें कि अशक्त कुछ भी का एक उदाहरण नहीं है।

action.getClass().getSuperClass().name().equals("logic.UserBehavior"); 

toString() करने के लिए कॉल है:

return (action instanceof logic.UserBehavior); 

आपका विधि इस के साथ बेहतर होगा:

5

आप केवल बहुत पहले सुपर क्लास जाँच करना चाहते हैं:

return action.getClass().getSuperclass() == logic.UserBehavior.class; 

अन्यथा:

return (action instanceof logic.UserBehaviour);