Java中可以更改内部类的外部类实例吗?

2023-12-19

在Java中,每当创建内部类实例时,它都会与外部类的实例相关联。出于好奇,是否可以将内部类与外部类的另一个实例相关联?


是的,这是可能的,尽管这对我来说听起来是一个非常糟糕的主意。这个想法是设置否则final使用反射指向外部实例的指针(不保证成功)。

import java.lang.reflect.*;

public class Me {
    final String name;

    Me(String name) {
        this.name = name;
    }

    class InnerMe {     
        String whoAreYou() {
            return name;
        }
    }   

    InnerMe innerSelf() {
        return new InnerMe();
    }

    public static void main(String args[]) throws Exception {
        final Me me = new Me("Just the old me!");
        final InnerMe innerMe = me.innerSelf();
        System.out.println(innerMe.whoAreYou()); // "Just the old me!"
        Field outerThis = innerMe.getClass().getDeclaredFields()[0];
        outerThis.setAccessible(true);
        outerThis.set(innerMe, new Me("New and improved me!"));
        System.out.println(innerMe.whoAreYou()); // "New and improved me!"
    }

}

这里的关键部分是outerThis.setAccessible(true); -- a 安全管理器 http://java.sun.com/javase/6/docs/api/java/lang/SecurityManager.html可以执行一项政策来阻止这种情况的成功。

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

Java中可以更改内部类的外部类实例吗? 的相关文章

随机推荐

  • 多个点能否组成一个圆? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如果我有例如20个点 我如何检查这些
  • 通过代码在换行单元格中插入换行符

    Is it possible to insert line break in a wrapped cell through VBA code similar to doing Alt Enter when entering data man
  • 当 React 已经渲染时无法刷新更新

    我试图在 API 返回错误时显示警报 对于警报窗口 我使用 sweetalert2 在我的渲染方法中 我正在检查错误消息是否包含内容 如果它包含错误消息 我想向用户显示警报 当我提交表单时 我会进行 API 调用 如果返回错误 reduce
  • 在 Linq 中返回单个列表属性 List

    我在这里遇到问题 我有一个列表 this Ddown 有 3 个属性 我想编写一个 Linq 查询来返回其中一个属性 假设我有属性 a b c 我想返回列表 c 我如何在 linq 中做到这一点 var listOfC this Ddown
  • 如何向直方图添加颜色条?

    I have a histogram like this just like a normal histogram 在我的情况下 总是有 20 个条形 x 轴从 0 到 1 并且条形的颜色是根据 x 轴上的值定义的 我想要的是添加一个色谱
  • TeamCity GitHub 私钥访问被拒绝

    有谁知道使用 TeamCity 与 github 和 ssh 私钥的教程 我尝试设置 git hub 进行连接 但要么出现身份验证错误 要么访问被拒绝 我在 Windows 2003 上运行 TeamCity 我将构建代理作为自定义帐户运行
  • 在 SPSS 宏中循环遍历并行列表/数组

    我想编写一个SPSS宏来执行三个操作 生成自定义表 清洁输出窗口 导出表 如您所知 SPSS 宏工具允许使用两种类型的循环 数字 如 do i x to y 和 list for every 像 do i in 1 我的目标是创建一个带有如
  • 是否可以在没有 REST 请求的情况下创建 Kafka 连接器?

    是否可以在没有 REST 请求的情况下创建 Kafka 连接器 我已经通过 java 代码启动了我的工作程序 分布式 并希望我的连接器也随之启动 我不想使用 REST 调用 不是来自浏览器 也不是来自代码 来创建我的连接器 我只想要一个简单
  • codeigniter 数据库移动到另一个表

    如何解决这个 codeigniter 问题 我有一个数据库表 Mysql 我需要使用 Php Codeigniter 框架将其所有字段内容移动到另一个表 将数据从一个表插入到另一个可在我的模型和控制器中使用的表的语法是什么 我尝试使用这些
  • Angular 2 核心模块和功能模块的区别

    我不明白之间的区别core https angular io docs ts latest guide ngmodule html core module and feature https angular io docs ts lates
  • 标签“文件系统”出现问题

    出于娱乐原因 我编写了一个 PHP 类 它用标签对文件进行分类 而不是以分层方式进行分类 标签以 tag1 tag2 tagN MD5 EXTENSION 的形式存储在文件名本身中 因此我坚持使用FS OS 施加的字符限制 255 这是课程
  • WSL-2:哪些端口会自动转发?

    我已经研究 WSL 2 一段时间了 但并不完全了解主机和 WSL 2 区域之间的流量是如何路由的 在某些来源中 WSL 2 使用的所有端口似乎都会自动可供主机使用 比如在微软的这个教程 https learn microsoft com e
  • 在 Symfony 中防止 Doctrine 的查询缓存

    在我的 Symfony Doctrine 应用程序中 我有一个按 RANDOM 排序的查询 我多次调用相同的方法 但看起来查询的结果正在被缓存 这是我的相关代码 query table gt createQuery p gt select
  • 如何在 Chrome 应用程序中包含数据文件以供本机客户端模块读取

    如果我有一个 Chrome 打包应用程序 其中还包含 PNaCl NaCl 模块 是否有办法在打包应用程序中包含一些数据文件 然后 NaCl 模块将读入这些数据文件 我不需要编写任何文件 只需包含本机模块需要使用的一些数据文件即可 Java
  • Jruby 中的 Java 数组

    我有一个 Java 库 我正在从中提取一些数据 它输出一个 3D 数组 但是我无法用它做任何事情 D 5615a6e0 是我得到的回应 我尝试过映射它 arr arr map arr arr to a 但我什么也没得到 解析这个java数组
  • Android 稍后通知用户

    我想在android中创建一个应用程序 其中用户选择未来的某一天 然后 当那一天到来时 他会收到通知 我知道这可以通过日历或注释来完成 但这并不对我来说很重要 我有两个与前一个问题相关的问题 A 我该如何执行通知 我在其他地方读到过有关向用
  • 停止/取消执行 FFmpeg 命令

    Android 有可用的 FFmpeg Static 二进制 我们可以在 FFmpeg 执行某些操作时停止 取消某些 FFmpeg 执行 命令 https github com WritingMinds ffmpeg android jav
  • 为什么 jQuery 事件在就绪函数之外时不触发,即使文档已就绪?

    尽管 DOM 似乎已加载 控制台中显示 就绪 为什么在这种情况下单击事件未触发 document ready function console log ready p click function alert You clicked on
  • 如何在页面加载时逐个淡入图像?

    我创建了以下代码 在页面加载时向页面上的所有 div 添加 opacity 1 这样做时 所有图像都会在页面加载时看到 但我希望每个图像都慢慢淡入 并且在一个图像完全加载 可见后 我希望第二个图像加载完全相同 然后加载第三个图像 我怎样才能
  • Java中可以更改内部类的外部类实例吗?

    在Java中 每当创建内部类实例时 它都会与外部类的实例相关联 出于好奇 是否可以将内部类与外部类的另一个实例相关联 是的 这是可能的 尽管这对我来说听起来是一个非常糟糕的主意 这个想法是设置否则final使用反射指向外部实例的指针 不保证