Java 内部类对象作为外部类构造函数参数
我有一个抽象包装类Foo,它通过提供接口读取器来定义功能。当我实现一个独立的读卡器并提供它时,一切都很好。 当我试图通过一个内部类来实现这一点时,就会出错。在内部类中实现Reader是我的一项要求Java 内部类对象作为外部类构造函数参数,java,class,interface,Java,Class,Interface,我有一个抽象包装类Foo,它通过提供接口读取器来定义功能。当我实现一个独立的读卡器并提供它时,一切都很好。 当我试图通过一个内部类来实现这一点时,就会出错。在内部类中实现Reader是我的一项要求 public abstract class Foo { private Reader reader; public Foo(Reader reader) { this.reader = reader; }
public abstract class Foo
{
private Reader reader;
public Foo(Reader reader)
{
this.reader = reader;
}
public void read()
{
this.reader.doit();
}
}
“由于某些中间构造函数调用,MapLink类型的封闭实例不可用”
我做错了什么?尝试制作
FooReader
静态
。Java中的内部类绑定到外部类的实例,而不是类的实例,除非它们是静态的
在实际拥有实例之前,不能使用实例内部类,因为
读取器的实际类型类似于myInstance.Reader
问题是FooReader
的构造函数要求在其前面实例化外部类(ReaderFoo
)(因为内部类存储对其包含实例的引用),但您在构造函数中为ReaderFoo
创建了一个引用。这是一个鸡和蛋的问题。您通常是对的,但我想知道为什么我甚至不能使用super(new MapLink.mapreder());那么public关键字有什么意义?new MapLink.mapreder()
被编译器隐式转换为新的MapLink.mapleader(MapLink.this)
(如果mapleader
是一个内部类),并且MapLink.this还不可用。@JamieFlowers你能给我们看一下mapleader
和mapleader
的一些代码吗?对不起,复制粘贴错误。我的意思是超级(new ReaderFoo.FooReader());你知道我在哪里可以读到更多关于这种隐式转换的信息吗?使用new关键字通常会标记新对象的创建,这不是很直观。
public class ReaderFoo extends Foo
{
public class FooReader implements Reader
{
@Override
public void doit()
{
// functionality
}
}
public ReaderFoo ()
{
super(new FooReader());
}
}
public class ReaderFoo extends Foo
{
public static class FooReader implements Reader
{
@Override
public void doit()
{
// functionality
}
}
public ReaderFoo ()
{
super(new FooReader());
}
}