Java 内部类对象作为外部类构造函数参数

Java 内部类对象作为外部类构造函数参数,java,class,interface,Java,Class,Interface,我有一个抽象包装类Foo,它通过提供接口读取器来定义功能。当我实现一个独立的读卡器并提供它时,一切都很好。 当我试图通过一个内部类来实现这一点时,就会出错。在内部类中实现Reader是我的一项要求 public abstract class Foo { private Reader reader; public Foo(Reader reader) { this.reader = reader; }

我有一个抽象包装类Foo,它通过提供接口读取器来定义功能。当我实现一个独立的读卡器并提供它时,一切都很好。 当我试图通过一个内部类来实现这一点时,就会出错。在内部类中实现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());
    }
}