سؤال

في مشروع Android الخاص بي ، أقوم بتحديد بعض عمليات الاسترجاعات للعمل على نقرات الزر أو أحداث الاتصال أو أحداث واجهة المستخدم مثل dilaog.onshow (). لأغراض العرض التجريبي ، اخترت واجهة قابلة للتشغيل يجب إطلاقها من بعض رمز النشاط. مع جافا ، لدي طرق مختلفة للتعبير عن نفسي.

نمط واحد هو استخدام فئة مجهولة

runOnUiThread(new Runnable() { 
    public void run() { 
        doSomething(); 
    }
});

private void doSomething() {
}

آخر - لتحديد فصل خاص داخلي ، أي

private DoSomething implements Runnable {
    public void run() { 
        // do something; 
    }
}
...
runOnUiThread(new DoSomething());

آخر - لاستخدام عضو خاص ، مثل هذا:

private final Runnable doSomething = new Runnable() {
    public void run() { 
        // do something; 
    }
}
...
runOnUiThread(doSomething);

إليكم آخر ، وهو ما أحبه بشكل أفضل ، لأنه من ناحية لا يبني بالفعل كائنات ما لم يستخدمها شخص ما حقًا ، لأنه يتجنب فئات إضافية ، لأنه قد يستغرق المعلمات إذا لزم الأمر.

private Runnable doSomething() { 
    return new Runnable() {
        public void run() { 
            // do something; 
        }
    }
}
...
runOnUiThread(doSomething());

أنا لا أبحث عن حجج الذوق أو المعتقد الديني ، ولكن من قابلية الصيانة والأداء. أود أن أتلقى تلميحات ونصائح يمكن أن تساعدني في تطوير تفضيلاتي الخاصة ، ربما - تفضيلات مختلفة وفقًا للظروف المعطاة.

المفسد:

لقد جعل تقدم جافا هذا السؤال عفا عليه الزمن ، انظر الإجابة المقبولة.

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

المحلول 5

اليوم ، عندما تتوفر Java 8 تقريبًا لنظام Android و Android Studio تلقائيا يتظاهر بأن Lambdas مدعوم بالفعل ، يبدو أن الحل المجهول (#1) هو الخيار الواضح:

collapsed

expanded

نصائح أخرى

لا أعتقد أن هناك أي طريقة تصاعدية للتعامل مع عروض الاسترجاعات.

أنا عادة مضمّن فئة مجهولة أولاً. عندما تصبح الطريقة كبيرة جدًا ، أقوم باستخراج إنشاء الفصل في وظيفة منفصلة. عندما يصبح الفصل أكبر من اللازم ، أقوم باستخراج ملفه الخاص.

إذا كنت تستخدم IDE مثل Eclipse ، فيمكنك تنفيذ كل عمليات إعادة التجديد هذه تلقائيًا وأمان.

مثل Manuel Silva و @Toby Champion ، أنا لا أحب الفصول الداخلية المجهولة. يصعب قراءتها إلى حد ما ، ليست "OO" جدًا من حيث أنه لا يمكن تمديدها ، أو لا يمكن أن تنخفض ، أو المستوطنين أو أي شيء يجب تعديل السلوك ، وما إلى ذلك ، وغالبًا ما ينتهي بهم الأمر انتهاك المبدأ الجاف عند إضافة نفس الرمز في 27 مكانًا مختلفًا.

أميل إلى استخدام الأعضاء الخاصين (الخيار رقم 3) ، أو وظيفة خاصة (نمطك الرابع) عادة ما تسمي getAsrunnable ().

أنا جديد جدًا على Android ، لكن الفصول المجهولة تجعلني أشعر بالغثيان ويبدو أنك بديل لـ RunonuithRead على أي حال: Asynctask ، تمت مناقشته هنا:سؤال RunonuithRead

من وجهة نظري ، فإن فئة مجهولة تقلل حقًا من قابلية القراءة. نظرًا لأن رمز واجهة المستخدم غالبًا ما يكون مطوّلة للغاية ، فإن إضافة عمليات عودة مجهولة لكل زر يمكن أن تؤدي إلى فصول كبيرة جدًا. نتيجة لذلك ، أستخدم الطبقات الخاصة الداخلية.

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