从内部类对象获取外部类对象

2023-11-21

我有以下代码。我想获取创建内部类对象的外部类对象inner。我该怎么做?

public class OuterClass {

    public class InnerClass {
        private String name = "Peakit";
    }

    public static void main(String[] args) {
        OuterClass outer = new OuterClass();
        InnerClass inner = outer.new InnerClass();
       // How to get the same outer object which created the inner object back?
        OuterClass anotherOuter = ?? ;

        if(anotherOuter == outer) {
             System.out.println("Was able to reach out to the outer object via inner !!");
        } else {
             System.out.println("No luck :-( ");
        }
    }
}

EDIT:好吧,有些人建议通过添加一个方法来修改内部类:

public OuterClass outer() {
   return OuterClass.this;
}

但是,如果我无法控制修改内部类,那么(只是为了确认)我们是否有其他方法从内部类对象获取相应的外部类对象?


在内部类本身中,您可以使用OuterClass.this。该表达式允许引用任何词汇上封闭的实例,在 JLS 中描述为合格的this.

I don't think不过,有一种方法可以从内部类的代码外部获取实例。当然,您可以随时介绍自己的财产:

public OuterClass getOuter() {
    return OuterClass.this;
}

编辑:通过实验,看起来保存对外部类的引用的字段具有包级访问权限 - 至少对于我正在使用的 JDK 来说是这样。

编辑:使用的名称(this$0) is实际上在 Java 中有效,尽管JLS不鼓励其使用:

The $字符只能用于 机械生成的源代码或者, 很少,访问预先存在的名称 遗留系统。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从内部类对象获取外部类对象 的相关文章

随机推荐

  • 每个VST SDK似乎都是针对C++的,那么C#呢?

    我想开始制作 VSTi 更具体地说 midi 那些不产生任何声音而只是将 midi 数据输出到其他 vst 插头 琶音器 和弦工具等 的 现在我刚刚买了 C 书籍 认为这将是一门不错的语言 不仅仅是 vst 编程 但每个人都一直说 C 是正
  • 如何以编程方式卸载flutter中的应用程序?

    我正在 flutter 中构建一个启动器应用程序 但我无法添加卸载功能 请帮我 添加权限在manifest file
  • 清理 SQL 数据

    谷歌出现了各种关于清理网络访问查询的讨论 但我没有找到任何解决我所关心的问题的内容 在 C 程序中清理用户输入数据 这必须通过可逆转变来完成 而不是通过移除来完成 作为问题的一个简单例子 我不想破坏爱尔兰名字 最好的方法是什么 是否有任何库
  • 将图像绘制到面板控件上会在调整大小时产生伪像

    目前我正在尝试做我认为简单的任务 将图像绘制到整个区域Panel control在 Windows 窗体中 请暂时忽略我可以使用BackgroundImage财产 要绘制的图像如下所示 IE 一个黄色框 周围有 1 像素蓝色框 为了绘图 我
  • 在 GCC 中编译而不生成输出文件

    gcc c somefile c无需链接即可编译并生成相应的somefile o 是否可以编译文件gcc不生成任何输出文件 我知道还有其他方法可以实现此目的 但我很好奇是否有一个标志专门用于正在经历寻找错误 警告的源代码 您可能会喜欢 fs
  • 在 Joomla 框架内强制 PHP 下载文件

    我有一些 PHP 代码 可以在数据库上运行查询 将结果保存到 csv 文件 然后允许用户下载该文件 问题是 csv 文件包含实际 csv 内容周围的页面 HTML 我已经在这里阅读了所有相关问题 包括this one 不幸的是 我的代码存在
  • 从自定义源(非标准 XML)加载 WCF 配置(针对服务器 + 客户端)

    我一直在尝试找到一种方法从备用源 而不是标准的 web config app config 加载我的 WCF 服务配置 巨大的 XML 配置数据 BLOB 我们在受限环境中运行 无法访问服务器的文件系统 因此我们无法自己对 WCF 配置进行
  • 升级到 Gradle 5 后 Querydsl 注释处理器问题

    我有一个 gradle 脚本 它从 Mongo 带注释的实体生成 querydsl 类 到目前为止它可以正常工作 但是升级到 Gradle 5 后我遇到了一个问题 What went wrong Execution failed for t
  • “id 无法解析或不是字段”错误?

    我不断收到此错误 我应该做吗id一个字段 我的代码是 public void onCreate Bundle icicle super onCreate icicle setContentView R layout main ImageVi
  • MySQL 和嵌套集:慢 JOIN(不使用索引)

    我有两张桌子 地区 CREATE TABLE localities id int 11 NOT NULL AUTO INCREMENT name varchar 100 NOT NULL type varchar 30 NOT NULL p
  • Winform 启动画面 - VB.NET - 计时器

    我的应用程序和该表单上有一个启动屏幕 我有一个计时器 Private Sub Splash Load ByVal sender As Object ByVal e As System EventArgs Handles Me Load Sp
  • symfony2:在控制器操作内部设置表单外部的表单字段的值

    我需要设置 symfony2 表单元素的值 我使用一个doctrine2实体 一个Symfony Component Form AbstractType以及我的控制器操作中的 createForm 方法 saleDataForm this
  • iphone:如果浮点数为负数,则转换为无符号整数的浮点数将设置为 0?

    试试看 volatile float bob 344 0f unsigned int fred unsigned int bob printf d n fred 输出将为 0 显然 我希望它能够回绕 就像我从一个有符号的 int 转换为一个
  • 如何将 Sql Server 2008 DateTimeOffset 转换为 DateTime

    我希望转换一个有DATETIMEOFFSET场 下降到DATETIME字段但通过注意偏移量来重新计算时间 实际上 这将值转换为UTC eg CreatedOn 2008 12 19 17 30 09 0000000 11 00 将被转换为
  • 透明背景

    如何让背景50 透明 假设 AbsoluteLayout 的背景很暗 但您仍然可以看到它 您可以将透明主题应用于所需的活动 在 res values style xml 中创建新样式
  • Rails 5.1 中还需要 `require jquery_ujs` 吗?

    我正在我的中安装 jQuery5 1 xRails 应用程序通过jquery rails gem 在 gem 设置中 他们建议将这些行添加到application js默认情况下 require jquery require jquery
  • 使用 nginx 在同一域上提供 React 前端和 php 后端

    我有一个 React 前端和一个 Symfony 后端 我试图在同一个域上提供服务 React 前端需要提供资产 如果存在 否则需要提供回退服务index html 我想在以下情况下提供 php Symfony 应用程序 api位于请求 u
  • 了解 Spark shuffle 溢出

    如果我理解正确的话 当一个reduce任务开始收集它的输入shuffle块 来自不同map任务的输出 时 它首先将它们保存在内存中 Q1 当执行器的 shuffles 保留内存量 在内存管理更改之前 Q2 耗尽时 内存中的数据将 溢出 到磁
  • SQL:如果不存在如何更新或插入?

    我下面有一个 SQL 插入 工作正常 但是我希望它检查 DATE xxxx NAME xxxx 和 JOB xxx 是否存在 并更新 HOURS 如果存在 否则插入新行 这可以用 SQL 实现吗 INSERT INTO TABLE NAME
  • 从内部类对象获取外部类对象

    我有以下代码 我想获取创建内部类对象的外部类对象inner 我该怎么做 public class OuterClass public class InnerClass private String name Peakit public st