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

时间:2013-05-31 09:41:24

标签: java class interface

我有一个抽象包装类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());
    }
}

我做错了什么?

2 个答案:

答案 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。这是一个鸡蛋问题。