2

我仍在与 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()?什么是正确的语法?

4

2 回答 2

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,即。保留对它们的引用。

于 2013-10-02T16:10:56.010 回答
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();
  }
}
于 2013-10-02T16:53:11.190 回答