我有一些这样的代码:
public abstract class Foo {
public static Foo getFoo() {
return new FooImpl();
}
abstract void DoFoo();
private class FooImpl extends Foo {
public FooImpl() { }
@Override
void DoFoo() { }
}
}
但Eclipse正在告诉我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();
答案 0 :(得分:9)
优秀的解释here - 简而言之,您需要创建类FooImpl
static
,因此它只与外部类绑定,而不是与特定的实例绑定外部类的em>(你没有)。 getFoo
方法看起来应该是静态的,顺便说一下 - 否则,你计划调用Foo
的实例?
答案 1 :(得分:2)
您打算如何打电话给getFoo()
?
除非你做的事情完全是时髦和激进的,否则你需要做出static
。
答案 2 :(得分:1)
制作FooImpl
课程static
,它会起作用。