【问题标题】:Java: How to get immediate parent(who is not the top level class) from an inner class?Java:如何从内部类中获取直接父级(不是顶级类)?
【发布时间】:2013-05-03 00:49:36
【问题描述】:

我知道 Java 中静态嵌套类和内部类之间的区别。 我说的是内部阶级。 我也知道我们可以使用“OuterClass.this”从内部类中获取外部类。

和目录一样,有两种导航方式:绝对导航和相对导航。 例如:“/aaa/bbb/ccc/ddd”,如果我在文件夹“ccc”中并想引用“bbb”,我们可以:“cd /aaa/bbb”或“cd ..”。

现在介绍 Java 内部类。

class AAA{
    BBB b = new BBB();
    class BBB{
        CCC c = new CCC();
        //CCC c = new CCC(b);
        class CCC{
            //SECOND VERSION
            //BBB parent = null
            //CCC(BBB parent_){
            //    parent = parent_;
            //}
            DDD d = new DDD();
            BBB GetParent(){
                return AAA.this.b;    //I know this will work
                //or return parent; if using the SECOND VERSION
            }
            class DDD{
            }    
        }
    }
}

我提供了两个版本: AAA.this.b 和 引入一个成员变量“parent”,赋值给构造函数的参数。

我的问题: 如果我不引入成员变量,我可以使用相对方式从内部类获取其直接父级吗? (如 cd ..)

【问题讨论】:

  • AAA.this.b 是怎样的“父母”?不清楚你在问什么?两个版本都返回 BBB 类的任意实例,而不是使用 GetParent 方法包含 DDD 对象的实例。所以第三个版本似乎是'return new BBB();`
  • 谢谢。但我不能同意。我认为这种情况很清楚。如果您有一个 AAA 实例,说“a”,那么您将有:a、a.b、a.b.c、a.b.c.d;您将按嵌套顺序组装 4 个实例。
  • BBB.this 不起作用吗?
  • 显然,您已经有一种方法可以在 getParent() 类中访问父级实例。这就是这样做的方法。它实际上让我想知道你在问什么。为什么 getParent() 不适合?也可以通过java.lang.Class方法获取内部类的父类,getDeclaringClass()
  • "BBB.this" 是我想要的答案。 getParent 是我通常在 C++ 中使用的方式;由于 Java 有“BBB.this”,我不必为内部类声明的每一级实现类似“getParent”的函数(也不必定义额外的“m_Parent”变量)。感谢您的所有努力和帮助!

标签: java inner-classes


【解决方案1】:

您可以使用BBB.this 直接引用BBB 类的封闭实例。

【讨论】:

    【解决方案2】:

    虽然通常内部类代码不需要引用 外部类,因为它已经有一个用于访问成员的隐式类 外部类的引用,如果它需要传递它,它需要一个对外部类的引用 参考其他一些代码。如果这是您想要的,请使用第一个版本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-03
      • 1970-01-01
      • 1970-01-01
      • 2018-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多