لماذا يمكن أن يكون لدينا أعضاء نهائيون ثابتون ولكن لا يمكننا أن يكون لدينا طريقة ثابتة في فصل داخلي؟

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

سؤال

لماذا يمكن أن يكون لدينا أعضاء نهائيون ثابتون ولكن لا يمكننا أن يكون لدينا طريقة ثابتة في فئة داخلية غير ثابتة؟

هل يمكننا الوصول إلى متغيرات الأعضاء النهائية الثابتة للفئة الداخلية خارج الفصل الخارجي دون إنشاء فئة داخلية؟

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

المحلول

يمكنك الحصول على طريقة ثابتة في ثابتة الطبقة "الداخلية".

public class Outer {
    static String world() {
        return "world!";
    }
    static class Inner {
        static String helloWorld() {
            return "Hello " + Outer.world();
        }
    }   
    public static void main(String args[]) {
        System.out.println(Outer.Inner.helloWorld());
        // prints "Hello world!"
    }
}

ومع ذلك ، أن تكون دقيقًا Inner يطلق عليه فئة متداخلة وفقًا لمصطلحات JLS (8.1.3):

قد ترث الطبقات الداخلية أعضاء ثابتة لا يتم تجميع ثوابت الوقت على الرغم من أنهم قد لا يعلنونهم. قد تعلن الفصول المتداخلة التي ليست فصولًا داخلية الأعضاء الثابتة بحرية ، وفقًا للقواعد المعتادة للغة البرمجة Java.


أيضا ، هو ليس صحيح تمامًا أن الفئة الداخلية يمكن أن تحتوي static final أفراد؛ لكي تكون أكثر دقة ، يجب أن تكون أيضًا ترجمة ثوابت الوقت. يوضح المثال التالي الفرق:

public class InnerStaticFinal {
    class InnerWithConstant {
        static final int n = 0;
        // OKAY! Compile-time constant!
    }
    class InnerWithNotConstant {
        static final Integer n = 0;
        // DOESN'T COMPILE! Not a constant!
    }
}

السبب في أن ثوابت الترجمة المسموح بها في هذا السياق واضح: فهي مضمنة في وقت الترجمة.

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