سؤال

لدي بعض الكود مثل هذا:

public abstract class Foo {
    public static Foo getFoo() {
        return new FooImpl();
    }

    abstract void DoFoo();

    private class FooImpl extends Foo {
        public FooImpl() { }

        @Override
        void DoFoo() { }
    }
}

لكن الكسوف يخبرني No enclosing instance of type Foo is accessible. فكيف يمكنني الحصول على هذا للعمل؟

حاولت أن أجعلها بسيطة قدر الإمكان لمعرفة ما إذا كانت تجميعها:

public abstract class Foo {
    public static Foo getFoo() {
        return new FooImpl();
    }

    private static class FooImpl extends Foo {
        public FooImpl() { }
    }
}

وما زلت أحصل على نفس الخطأ. ماذا ينقصني؟

مثبت! لقد غيرت الخط return new FooImpl(); ل return new Foo.FooImpl();

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

المحلول

تفسير ممتاز هنا - باختصار، تحتاج إلى جعل الفصل FooImpl static, ، لذلك فقط مرتبطة فقط بالطبقة الخارجية، وليس محددة نموذج من الطبقة الخارجية (التي لا تملكها). ال getFoo تبدو الطريقة أيضا أنها يجب أن تكون ثابتة، راجع للشغل - خلاف ذلك، ماذا نموذج من Foo هل كنت تخطط للاتصال بها؟

نصائح أخرى

كيف تنوي الناس الاتصال getFoo()?

ما لم تكن تفعل شيئا غير تقليدي تماما وراديكالي، فستحتاج إلى جعله static.

اعمل ال FooImpl صف دراسي static وسيعمل.

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