我有一个抽象包装类Foo,它通过提供Interface Reader来定义功能。当我实现一个单独的Reader并提供它时,一切正常。 当我试图通过内部阶级来做这件事时,它会出错。将Reader实现在内部类中是我的要求。
public abstract class Foo
{
private Reader reader;
public Foo(Reader reader)
{
this.reader = reader;
}
public void read()
{
this.reader.doit();
}
}
“由于某些中间构造函数调用,没有可用的MapLink类型的实例”
public class ReaderFoo extends Foo
{
public class FooReader implements Reader
{
@Override
public void doit()
{
// functionality
}
}
public ReaderFoo ()
{
super(new FooReader());
}
}
我做错了什么?
答案 0 :(得分:4)
尝试制作FooReader
static
。 Java中的内部类绑定到外部的实例而不是类,除非它们是 static 。
public class ReaderFoo extends Foo
{
public static class FooReader implements Reader
{
@Override
public void doit()
{
// functionality
}
}
public ReaderFoo ()
{
super(new FooReader());
}
}
在实际拥有实例之前,您不能使用实例内部类,因为Reader
的实际类型将类似于myInstance.Reader
。
答案 1 :(得分:3)
问题是FooReader
的构造函数需要在它之前实例化外部类(ReaderFoo
)(因为内部类存储对其包含实例的引用),但是你要创建一个在构造函数到ReaderFoo
。这是一个鸡蛋问题。