4

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

我究竟做错了什么?

4

2 回答 2

4

尝试制作FooReader static. Java 中的内部类绑定到外部的实例而不是,除非它们是静态的。

public class ReaderFoo extends Foo
{
    public static class FooReader implements Reader
    {
        @Override
        public void doit()
        {
            // functionality
        }
    }   

    public ReaderFoo ()
    {
        super(new FooReader());
    }
}

在实际拥有实例之前,您不能使用实例内部类,因为实际类型Reader将类似于myInstance.Reader.

于 2013-05-31T09:46:17.317 回答
3

问题是构造函数 toFooReader要求在它之前实例化外部类 ( ReaderFoo)(因为内部类存储对其包含实例的引用),但是您在构造函数中创建了一个to ReaderFoo。这是一个先有鸡还是先有蛋的问题。

于 2013-05-31T09:47:07.713 回答