यह मेरा कोड है:

public class WriteReviewController {
    
    private OverviewActivity overviewActivity;
    private WriteReviewActivity writeReviewActivity;
    ...
    
    public WriteReviewController(AppCompatActivity appCompatActivity) {
                if (appCompatActivity.getClass().isAssignableFrom(OverviewActivity.class))
                    this.overviewActivity = (OverviewActivity) appCompatActivity;
                else if (appCompatActivity.getClass().isAssignableFrom(WriteReviewActivity.class))
                    this.writeReviewActivity = (WriteReviewActivity) appCompatActivity;
            }
    }

यह मेरे आवेदन के लिए एक नियंत्रक है। मैं यह जांचना चाहता हूं कि पैरामीटर appCompatActivity एक OverviewActivity है या WriteReviewActivity। यह विधि इन दो गतिविधियों के लिए केवल पैरामीटर this के रूप में पारित होने के लिए लागू की जाएगी।

क्या यह जांच सही है या मुझे isAssignableFrom के बजाय instaceof का उपयोग करना चाहिए?

0
user12711792 16 जुलाई 2020, 11:38

1 उत्तर

सबसे बढ़िया उत्तर

आपको अधिकांश मामलों में instanceof का उपयोग करना चाहिए, isAssignableFrom को मैन्युअल रूप से लागू करना अनावश्यक है। यह तब किया जाना चाहिए जब आप Class वस्तुओं को संभालते हैं, लेकिन यहां आपके पास स्वयं उदाहरण हैं।

तो instanceof का उपयोग करके आपका कोड निम्न दिखाई देगा:

public class WriteReviewController {

    private OverviewActivity overviewActivity;
    private WriteReviewActivity writeReviewActivity;
    //...

    public WriteReviewController(AppCompatActivity appCompatActivity) {
        if (appCompatActivity instanceof OverviewActivity)
            this.overviewActivity = (OverviewActivity) appCompatActivity;
        else if (appCompatActivity instanceof WriteReviewActivity)
            this.writeReviewActivity = (WriteReviewActivity) appCompatActivity;
        }
    }
}

इसके बजाय दो कंस्ट्रक्टर लिखने के लिए अधिक स्वच्छ कोड होगा:

public class WriteReviewController {

    private OverviewActivity overviewActivity;
    private WriteReviewActivity writeReviewActivity;
    //...

    public WriteReviewController(OverviewActivity overviewActivity) {
        this.overviewActivity = overviewActivity;
    }

    public WriteReviewController(WriteReviewActivity writeReviewActivity) {
        this.writeReviewActivity = writeReviewActivity;
    }
}

लेकिन आपको ऐसा केवल तभी करना चाहिए जब आप WriteReviewController को इंस्टेंट करने के केवल यही 2 तरीके हों। आपका कोड एक AppCompatActivity पास करने की अनुमति देता है जो न तो OverviewActivity है और न ही WriteReviewActivity, इसलिए व्यवहार समान नहीं है, मैं बस इसका उल्लेख करता हूं।

1
Magyar Dávid 16 जुलाई 2020, 11:53