ما هو الخطأ في الطبقة الداخلية لا تستخدم فئة خارجية في جافا؟

StackOverflow https://stackoverflow.com/questions/1132930

  •  16-09-2019
  •  | 
  •  

سؤال

أنا أستخدم محلل ثابت في الكسوف لفحص التعليمات البرمجية الخاصة بي. فئة واحدة، فو، لديها الطبقة الداخلية، بار. اتلقى الخطأ التالي:

JAVA0043 Inner class 'bar' does not use outer class 'foo'

لماذا هذا خطأ؟ طالما أن الطبقة الخارجية تستخدم الطبقة الداخلية ليست كافية لجعل هذه المعلومات تختبئ مفيدة وصحيحة؟

الطبقة الداخلية ليست ثابتة.

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

المحلول

إذا كان من الممكن استخدام الطبقة الداخلية من قبل الطبقة الخارجية فقط، إلا أن الطبقة الداخلية لا تحتاج إلى إشارة إلى الطبقة الخارجية، ثم يمكنك القيام بذلك private static.

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

نصائح أخرى

يبدو وكأنه خطأ Enerjy.:

// Incorrect
class Log {
  // Position never uses the enclosing Log instance,
  // so it should be static
  class Position {
    private int line;
    private int column;
    Position(int line, int column) {
      this.line = line;
      this.column = column;
    }
  }
}

فئة متداخلة لا تستخدم أي متغيرات أو أساليب مثيل من أي من الفئات الخارجية لها يمكن إعلانها ساكنة.
هذا يقلل من الاعتماد بين الطبقتين، مما يعزز قابلية القراءة والصيانة.

// Correct
class Log {
  static class Position {
    private int line;
    private int column;
    Position(int line, int column) {
      this.line = line;
      this.column = column;
    }
  }
}

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

تتمتع الطبقة الداخلية غير الثابتة بإشارة ضمنية إلى مثيل فئةها الخارجية. يمكن أن يؤدي هذا المرجع المخفي إلى تأخير مجموعة القمامة (أو حتى منع) على الفئة الخارجية وإنشاء مشكلات التسلسل. لذلك يجب عليك فقط استخدام الطبقات الداخلية غير الثابتة عندما تحتاجها. من السهل أن ننسى إعلان ثابت الفئة، لذلك يحذرك تحليل الكود عندما لا تكون هناك حاجة إليها.

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

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