java 反射静态内部类_android-反射的使用(反射静态内部类、非静态内部类、匿名内部类等)...
直接上代码 com.**.routerdemo 替换成包名
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
public class ReflectionUtils {
public static void invokeInnerStaticClass() {
try {
Class clazz = Class.forName("com.**.routerdemo.Test$InnerStaticClass");
Constructor constructor = clazz.getDeclaredConstructor();
constructor.setAccessible(true);
Object instance = constructor.newInstance();
Method printM = clazz.getDeclaredMethod("print", String.class);
printM.setAccessible(true);
printM.invoke(instance, "I am InnerStaticClass");
Method getNameM = clazz.getDeclaredMethod("getName");
getNameM.setAccessible(true);
System.out.println("cxx getclassname=" + getNameM.invoke(instance));
} catch (Exception e) {
System.out.println("cxx Exception >>" + e.getMessage());
}
}
public static void invokeNormalStaticClass() {
try {
Class outerCls = Class.forName("com.**.routerdemo.Test");
Constructor outerConstructor = outerCls.getDeclaredConstructor();
outerConstructor.setAccessible(true);
Object outerInstance = outerConstructor.newInstance();
//正常内部类实例化 new Test().new InnerNormalClass();
Class clazz = Class.forName("com.**.routerdemo.Test$InnerNormalClass");
Constructor constructor = clazz.getDeclaredConstructor(outerCls);
constructor.setAccessible(true);
Object instance = constructor.newInstance(outerInstance);
Method printM = clazz.getDeclaredMethod("print", String.class);
printM.setAccessible(true);
printM.invoke(instance, "I am InnerStaticClass");
Method getNameM = clazz.getDeclaredMethod("getName");
getNameM.setAccessible(true);
System.out.println("cxx getclassname=" + getNameM.invoke(instance));
} catch (Exception e) {
System.out.println("cxx Exception >>" + e.getMessage());
}
}
public static void invokeMethod() {
try {
Bean bean1 = new Bean();
bean1.setVerCode(1);
Bean bean2 = new Bean();
bean2.setVerCode(1);
Class cls = Class.forName("com.**.routerdemo.Test");
Constructor constructor = cls.getDeclaredConstructor();
Method method = cls.getDeclaredMethod("equal", Bean.class, Bean.class);
method.setAccessible(true);
System.out.println("cxx is equal>>" + method.invoke(constructor.newInstance(), bean1, bean2));
} catch (Exception e) {
System.out.println("cxx e>>>" + e.getMessage());
}
}
public static void invokeAnonymousClass() {
try {
Class clazz = Class.forName("com.**.routerdemo.Test");
Constructor constructor = clazz.getDeclaredConstructor();
constructor.setAccessible(true);
Object outerInstance = constructor.newInstance();
Field field = clazz.getDeclaredField("runnable");
field.setAccessible(true);
Runnable r = (Runnable) field.get(outerInstance);
r.run();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void InvokeInnerClasses() {
try {
Class clazz = Class.forName("com.**.routerdemo.Test");
Object container = clazz.newInstance();
Class innerClazz[] = clazz.getDeclaredClasses();
for (Class cls : innerClazz) {
int mod = cls.getModifiers();
String modifier = Modifier.toString(mod);
if (modifier.contains("static")) {
//构造静态内部类实例
Constructor innerStatic = cls.getDeclaredConstructor();
innerStatic.setAccessible(true);
Method printM = cls.getDeclaredMethod("print", String.class);
printM.setAccessible(true);
printM.invoke(innerStatic.newInstance(), "I am InnerStaticClass");
} else {
Constructor innerNormal = cls.getDeclaredConstructor(clazz);
innerNormal.setAccessible(true);
Method print = cls.getDeclaredMethod("print", String.class);
print.setAccessible(true);
print.invoke(innerNormal.newInstance(container), "I am innerNormal");
}
}
// 获取匿名内部类实例
Field field = clazz.getDeclaredField("runnable");
field.setAccessible(true);
Runnable r = (Runnable) field.get(container);
r.run();
// 获取静态成员变量
Field staticField = clazz.getDeclaredField("paramStatic");
staticField.setAccessible(true);
staticField.setBoolean(container, true);
System.out.println("cxx test staticParam " + Test.paramStatic);
// 获取非静态成员变量
Field normalField = clazz.getDeclaredField("paramNormal");
normalField.setAccessible(true);
normalField.setBoolean(container, true);
System.out.println("cxx test paramNormal " + ((Test) container).paramNormal);
} catch (Exception e) {
System.out.println("cxx Exception >>" + e.getMessage());
}
}
}
被反射的类:
public class Test {
private static class InnerStaticClass {
private void print(String str) {
System.out.println("cxx 静态内部类print带参方法,参数" + str);
}
private String getName() {
return InnerStaticClass.class.getName();
}
}
private class InnerNormalClass {
private void print(String str) {
System.out.println("cxx 非静态内部类print带参方法,参数" + str);
}
private String getName() {
return InnerNormalClass.class.getName();
}
}
private Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("cxx 匿名内部类run方法");
}
};
public static boolean paramStatic = false;
public boolean paramNormal = false;
private boolean equal(Bean a, Bean b) {
return a.getVerCode() == b.getVerCode();
}
}
java 反射静态内部类_android-反射的使用(反射静态内部类、非静态内部类、匿名内部类等)...相关推荐
- Java 静态内部类与非静态内部类【复习】
一.静态内部类与非静态内部类的区别 1.静态内部类只能访问外部类的静态成员和方法 2.静态内部类不能访问外部类的非静态成员变量和非静态方法.他只 能访问外部类的静态成员和静态方法,非静态内部类能够访问 ...
- java 反射内部匿名内部类_android-反射的使用(反射静态内部类、非静态内部类、匿名内部类等)...
直接上代码 com.**.routerdemo 替换成包名 import java.lang.reflect.Constructor; import java.lang.reflect.Field; ...
- java mongodb 返回所有field_JAVA高级之反射
更多精彩,请点击上方蓝字关注我们! 今天跟大家分享JAVA高级之反射的知识. 一.什么是反射 反射就是把Java类中的各个成分映射成一个个的Java对象.即在运行状态中,对于任意一个类,都能够知道这个 ...
- js java 反射机制_java 类加载机制和反射机制
一.类的加载机制 jvm把class文件加载到内存,并对数据进行校验.解析和初始化,最终形成jvm可以直接使用的java类型的过程. (1)加载 将class文件字节码内容加载到内存中,并将这些静态数 ...
- Java面向对象编程篇6——注解与反射
Java面向对象编程篇6--注解与反射 1.注解概述 Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制 Java 语言中的类.方法.变量.参数和包等都可 ...
- java 获取当前年_java中的反射(三) - kelexin
目录一.反射1.class类2.访问字段3.调用方法4.调用构造方法5.获取继承对象6.动态代理二.sping中的反射 本篇转自:本篇内容spring中的反射 java中的反射(一): java中的反 ...
- Java学习总结3——枚举类和反射机制
Java枚举类和反射机制 一.Java枚举类(Enum): 在某些情况下,一个类的对象是有限且固定的,对于这种对象的实例有限且固定的类,在 Java 中被称为枚举类(Enum):枚举类是为了提高代码可 ...
- Java 反射?反射有什么缺点?你是怎么理解反射的(为什么框架需要反射)?
ava Java 基础这部分一些简单的问题就直接没有放上来. 需要资料的朋友麻烦一键三连之后点此免费获取! 基础: Java 反射?反射有什么缺点?你是怎么理解反射的(为什么框架需要反射)? 谈谈对 ...
- JAVA面试-基础加强与巩固:反射、注解、泛型等
https://www.jianshu.com/p/aaf8594e02eb 企业重视的是学习能力:基础很重要 JDK1.5新特性 泛型 foreach 自动拆箱装箱 枚举 静态导入(Static i ...
最新文章
- python tar.gz格式压缩、解压
- 吴恩达最新成果 CheXNet详解:肺炎诊断准确率超专业医师
- RESTful之权限Permissions
- Django模板之jinja2模板和CSRF
- python3 mysql错误 pymysql.err.OperationalError: (2013, 'Lost connection to MySQL server during query')
- Python-decorator装饰器小结
- (Kubernetes)k8s和docker的关系
- 【路由交换实验】VLAN
- html.renderaction 控制器,Html.RenderAction简单用法
- Google Chrome 53 Beta 引入影子 DOM V1
- scala入门-05继承类(extends)的使用
- 如何删除Android系统中的内置应用
- 安装好机器学习环境的虚拟机_虚拟环境之外的数据科学是弄乱机器的好方法
- Linux 设备驱动开发思想 —— 驱动分层与驱动分离
- Web前端的性能优化,需要怎么做?
- mac怎么查看gitlab的注册邮箱_单位企业邮箱是什么?公司邮箱怎么申请注册?
- 吴恩达神经网络和深度学习-学习笔记-19-机器学习策略(正交化+单一数字评估指标)
- ClearCase项目管理介绍
- lazarus编译程序提示不能加载PostgreSQL客户端动态库“libpq.dll“
- wps如何自己制作流程图_怎么制作流程图,wps自动生成流程图方法
热门文章
- 49 - 算法 - LeetCode 110 平衡二叉树 - 求二叉树的高度 -双重递归
- 计算机语言php自学,php自学需要多久?
- android 多数据图表,Android统计图表MPAndroidChart:为多条统计折线动态更新数据,以高温低温曲线为例【7】...
- Python使用UDP协议实现局域网内屏幕广播
- Python快速判断若干整数是否互不相同
- 尾递归优化原理与Python实现(以Fibonacci数列和小明爬楼梯问题为例)
- Python获取numpy数组中最大的5个元素(保持原顺序)
- oracle的ora01504,Oracle中的ORA-01548: active rollback segment '_SYSSMU1$' found
- php获取时间格式的年份,PHP获取当前时间、时间戳的各种格式写法汇总
- 江西职业教育集团计算机应用竞赛,【喜报】江西工业职院电子与信息工程学院学生在计算机应用竞赛钟喜获佳绩...