java 反射类 实例化_java-如何在Android上通过反射实例化成员类

我有一个保存/加载框架,该框架应该保存任意对象图.这包括非静态嵌套类的实例.

嵌套类require为其创建它们的父类的实例所拥有,并且嵌套类使用合成字段知道它属于哪个实例.

作为一个简单的例子,我介绍这个类:

public class Foo implements Savable {

private class Bar implements Savable {

public void saveState(Saver saver) {

saver.putInt(3);

}

}

private Bar myBar = new Bar();

public void saveState(Saver saver) {

saver.putSavable(myBar);

}

}

在“标准”编译器上,以下代码可以很好地接收一个对象(myBar),找到其父对象(Foo的特定实例)并保留其对子对象的引用:

if (objectClass.isMemberClass()) {

//We are a member class, which means we are a non-static inner class, and therefore must save our parent.

Field[] fields = objectClass.getDeclaredFields();

//We loop through each of our fields to find the synthetic field created by the compiler that points to our parent.

for (Field f : fields) {

String name = f.getName();

//The synthetic field pointing to the parent is named something like "this$0". At least, with the "standard" compiler it is.

if (name.startsWith("this$")) {

f.setAccessible(true);

Savable parent = (Savable)f.get(objectClass);

saver.putSavable("_parent", parent);

break;

}

}

if (!saver.containsKey("_parent")) {

throw new RuntimeException("Could not find the owner of inner class: " + objectClass);

}

}

因此,就像我说的那样,这在“标准”编译器上可以正常工作.然后在加载时,会发生类似的事情,除了我寻找一个构造函数,该构造函数接受父类的实例并实例化它,并传入父类.

但!

它不适用于Android VM.没有合成字段,并且构造函数都看起来很正常,就像它们没有采用父实例一样.

我在这里吗?该虚拟机显然不喜欢我的方法.在不要求内部类知道它们需要保存对其父类实例的引用的情况下,我在这里可以做些什么吗?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/521086.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

欧洲为何没有牛逼的互联网公司

戳蓝字“CSDN云计算”关注我们哦!作者 | 挖数责编 | 阿秃截至2018年底,全球市值最大的21家互联网科技公司里边,美国有12家,中国有9家,没有一家欧洲公司。在国内BAT搅动风云,美国亚马逊的贝索斯坐上全球首富…

混合云存储开启企业上云新路径--阿里云混合云备份容灾方案发布

当前,数据已经成为了企业的核心资产。而如果数据中心发生故障不仅会给企业带来巨大损失,甚至会直接迫使企业走向倒闭。对于企业而言,每一字节业务数据的丢失都是一场重大的灾难!那么,如何保证企业的核心数据资产不丢失…

java导出pdf_一张PDF了解JDK11 GC调优秘籍-附PDF下载

简介JDK11相比JDK10,添加了一个新的Source-File Mode,可以直接通过java来运行单个java源文件,而不需要进行编译。同时还提供了新的HTTP API,支持响应性stream。当然上面的都不是重点,重点的是JDK11是一个LTS版本&#…

RabbitMQ 普通集群配置_04

接上一篇:(企业级) 搭建集群 RabbitMQ SHELL脚本实战_03 文章目录RabbiMQ简介RabbiMQ模式RabbiMQ特点环境部署总览一、基础配置及RabbitMQ 安装1. 配置hosts文件2. 安装配置RabbitMQ3. 思路分析二、RabiitMQ 集群配置同步2.1. 拷贝erlang.cookie2.2. 同步.erlang.co…

java 百度api接口开发_百度熊掌号使用Java工具类对接API推送接口进行文章推送实例详解...

对于java程序员来说,自己运维的百度熊掌号当然得使用java的方式去每天推送文章了。目前,百度推出了百度熊掌号服务。旨在更好的为站长服务。那么百度熊掌号如何通过推送API接口实现自动文章推送呢?第一步:注册注册百度熊掌号&…

RabbitMQ 集群搭建_02_rpm版本(linux环境)

接上一篇:(企业级) CentOS7 安装 RabbitMQ最新版本 下载、安装、配置、运行、部署_01 文章目录一、SHELL脚本说明1. 选择脚本的原因2. 脚本总览二、脚本实战2.1. 安装rabbitmq前要准备的基础环境2.2. wget 远程下载安装包2.3. rpm安装软件2.4. 编辑配置文件修改密码…

力荐联邦学习系统,据说英伟达Clara“上架”新进展!

戳蓝字“CSDN云计算”关注我们哦!作者 | 晶少责编 | 阿秃这是晶少本年度第二次面访Kimberly Powell,这位英伟达医疗领域的美女副总裁。除了一贯的nice之外,更重要的一点,在深圳MICCAI 2019期间,英伟达医疗团队还带来了…

设置线程当天十二点执行_这份JAVA多线程笔记真的是细节满满,几乎全是你工作能用到的干货...

前言1:发挥多核CPU的优势(充分利用cpu资源)如果是单线程的程序,那么在双核CPU上就浪费了50%,在4核CPU上就浪费了75%。单核CPU上所谓的”多线程”那是假的多线程,同一时间处理器只会处理一段逻辑,只不过线程之间切换得比较快&#…

素有高冷之称,曾被微软放言取代冯氏结构的FPGA,被阿里云玩“活”了

对于专业人士来说,FPGA (现场可编程门阵列)并不陌生,由于其硬件并行加速能力和可编程特性,在传统通信领域和IC设计领域可谓是大放异彩,一直都被广泛使用。但是,大部分人还不是太了解它。 开发门槛过高,硬件…

java多参方法_Java中多参数方法进阶

多参数方法的问题相信很多人曾经都写过多参数的构造方法,就像下面示例的代码。当想要创建一个给全部属性赋值的实例的时候,就会利用这个多参数的构造方法。但是,当类的属性特别多的时候,你还会这么写吗?如果你写了一个…

Pod Preset玩转K8S容器时区自动配置

缘由 默认的情况,在K8S里启动一个容器,该容器的设置的时区是UTC0,但是对于很多客户而言,其主机环境并不在UTC0。例如中国客户在UTC8。如果不把容器的时区和主机主机设置为一致,则在查找日志等时候将非常不方便&#x…

Linux通过RPM方式指定软件安装目录

#可以使用prefix参数,将abc.rpm包安装到/usr/bin目录下 rpm -i –prefix/usr/bin abc.rpm

泪目!连拿3份 offer,AI 程序员求职经历火爆 IT圈!

程序员,如果有一天,你突然“被裁员”会怎么样?最近在知乎上浏览,看到这样一则内容:2019年,被裁员怎么挺过来?来源:知乎:https://www.zhihu.com/question/314153857其中这…

java 静态方法_80后程序员,教你学Java核心技术:用户自定义类+静态域静态方法

用户自定义类在第3章中,已经开始编写了一些简单的类。但是,那些类都只有一个简单的main方法。现在让我们开始学习如何设计复杂应用程序所需要的各种“主力类”(workhorse class)。通常,这些类没有main方法,而有自定义的实例域和实…

假如古代有了云计算,延禧攻略里的各位嫔妃要如何宫斗

延禧攻略最近大火,男女老少都在疯狂追剧,就连我们一项业余爱好单一的程序员小哥也用周末时间狂刷了70多集,妥妥的延禧粉。延禧攻略主要有两大看点,一个是各种CP让人眼花缭乱,帝后cp,后璎cp,卫龙…

mysql主从复制周期_Mysql主从复制的实现

basedir /usr/local/mysqldatadir /usr/local/mysql/dataport 3306server_id 2socket /tmp/mysql.sockskip_slave_start 1read_only 1relay_logrelay_logrelay_log_index relay_log.index重启mysqld服务[rootmysql_slave ~]# service mysqld restart3.5.查看master服务器的二进…

linux rpm包,安装路径查看及改变rpm包默认安装路径

查看: easwy:~$ rpm -qpl ext3grep-0.10.0-1.el5.rf.i386.rpm/usr/bin/ext3grep/usr/share/doc/ext3grep-0.10.0/usr/share/doc/ext3grep-0.10.0/INSTALL/usr/share/doc/ext3grep-0.10.0/LICENSE.GPL2/usr/share/doc/ext3grep-0.10.0/NEWS/usr/share/do…

容器服务kubernetes弹性伸缩高级用法

前言 近期,阿里云容器服务kubernetes发布了cluster-autoscaler的支持,开发者可以通过页面简单快捷的配置节点的弹性伸缩,支持普通实例、GPU实例以及竞价实例帮助开发者实现架构弹性和运营成本之间的博弈。阿里云容器服务kubernetes的cluster…

主进程中发生javascript错误_你知道 JavaScript 中的错误对象有哪些类型吗?

每当 JavaScript 中发生任何运行时错误时,都会引发Error对象。在许多情况下,我们还可以扩展这些标准Error对象,以创建我们自己的自定义Error对象。属性Error 对象具有2个属性name ——设置或返回错误名称。具体来说,它返回错误所属…

CSDN 1024,“猿”来在等你!

戳蓝字“CSDN云计算”关注我们哦!技术深不可测、薪资难以想象、着装招人吐槽、发量让人惊叹、笑点着实密集、情商令人堪忧......在这个你我他她它通过网络紧密互联、消息实时互通的 21 世纪,人们对身处技术至高点的程序员们仍然有着以上不接地气、呆板保…