سؤال
لدي بعض الكود مثل هذا:
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
وسيعمل.
لا تنتمي إلى StackOverflow