如何从Java中的封闭类访问内部类?

时间:2013-10-02 16:06:51

标签: java

我仍在与Java的参考文献作斗争。我不确定我是否会理解它们。有人能帮助我吗?

非静态内部类可以通过Outer.this访问封闭类。但外部类如何访问内部this

见这个例子:

class cycle
{
  abstract static class Entity
  {
    abstract static class Attribute
    {
      abstract static class Value
      {
        abstract Attribute attribute ();
      }

      abstract Entity entity ();
      abstract Value value ();
    }
  }

  static class Person extends Entity
  {
    class FirstName extends Attribute
    {
      class StringValue extends Value
      {
        Attribute attribute () { return FirstName.this; }
      }

      Entity entity () { return Person.this; }
      Value value () { return this.StringValue.this; }
    }
  }

  public static void main (String[] args)
  {
    Person p = new Person();
  }
}

StringValue可以访问FirstNameFirstName可以访问Person。但FirstName如何访问StringValue

我在<identifier> expected的实施中收到错误value()?什么是正确的语法?

2 个答案:

答案 0 :(得分:7)

Inner类是Outer类的成员,但它不是字段,即。不仅最多只有一个。

你可以做到

Outer outer = new Outer();
Outer.Inner inner1 = outer.new Inner();
Outer.Inner inner2 = outer.new Inner();
Outer.Inner inner3 = outer.new Inner();
... // ad nauseam

尽管每个Inner对象与其外部实例相关,但Outer实例对Inner实例一无所知,除非您告诉它,即。保留对它们的引用。

答案 1 :(得分:1)

感谢Sotirios这是我提问的代码的更正版本。

class cycle
{
  abstract static class Entity
  {
    abstract static class Attribute
    {
      abstract static class Value
      {
        abstract Attribute attribute ();
      }

      abstract Entity entity ();
      abstract Value value ();
    }
  }

  static class Person extends Entity
  {
    Attribute firstname = new Attribute()
      {
        Value value = new Value()
          {
            Attribute attribute () { return firstname; }
          };

        Entity entity () { return Person.this; }
        Value value () { return value; }
      };
  }

  public static void main (String[] args)
  {
    Person p = new Person();
  }
}