سؤال

في محاولة لتقليل عدد NCSS الخاص بي من الفصل (حوالي 850) ، قمت بتقسيم جميع الأساليب إلى فصولها الخاصة ولجعل الأمور أسهل ، أقدم فئة مجردة تحمل جميع وظائف المساعد.

AbstractMethod.class

public class AbstractMethod {
    protected String requestWebPage(URL url) {
        // download a webpage as a string
    }
}

Example "account" subclass

public class AccountData extends AbstractMethod {
    public String getAccount(String sessionId){
        String webPage = requestWebPage("http://google.com/"+sessionId);
        system.out.println(webPage);
        return webPage;
    }
}

لدي حوالي 10 من فئات الطريقة هذه وأرغب في تهيئتها فقط عندما تسمى إحدى الطرق في الفئة الرئيسية/الأساسية:

public class MyBaseClass() {
    private static AccountData ad;

    public MyBaseClass() {
        ad = new AccountData();  // Is there a better way?
    }

    public String getAccount(String sessionId) {
        return ad.getAccount(String sessionId);
    }
}

لقد حاولت إنشاء وظيفة Enitalise في فئة MyBaseClass التي تقبل النوع الفرعي كمعلمة وإنشاء كائن يعتمد على فئة:

private void initAccount() {
    if (ad == null) {
        ad = new AccountData();
    }
}

لكنها قبيحة ويجب أن يكون لدي واحدة لكل فئة فرعية.

إذن ، ما هي الطريقة "الصحيحة" للقيام بذلك؟ في بعض الأحيان عندما يتم استدعاء الفصل ، سنستخدم فقط 1 أو 2 من الأساليب ، لذلك لا أريد أن أضطر إلى تهيئة جميع الفئات الفرعية في كل مرة.

هل كانت مفيدة؟

المحلول 2

فصول إنشاء فصول في جافا رخيصة. إذا كانت الطبقات لا تفعل أي شيء كبير في مهاجمينها ، فما عليك سوى القيام بذلك

public String getAccount(String sessionId) {
    AccountData ad = new AccountData();
    return ad.getAccount(String sessionId);
}

لا تحسن حيث لا تكون nessesary. ملف تعريف الرمز الخاص بك من قبل. قد تنفد من خطأ الاضيبات الخاصة بك (أعرف أنني كنت عدة مرات).

نصائح أخرى

يبدو لي أن ما تريده حقًا هو استخدام طرق ثابتة بدلاً من فصول المساعد المجردة ، ربما إلى جانب import static.

وبهذه الطريقة ، فإن الفصل (ES) الذي يحدد هذه الأساليب ، كما تشاء ، لا يتم تهيئته إلا بمجرد استدعاء الأساليب فعليًا.

كما أنك لن تحد بنية الميراث بشكل عام إلى المكان الذي يتم فيه تحديد الأساليب.

هذا على افتراض أنك لا تستخدم أي بيانات مثيل لهذه الطرق ، بالطبع ؛ ولكن من مظهر رمز عينة ، لا يبدو بهذه الطريقة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top