JAVA反射机制获取类和方法
来源:互联网 发布:网络技术开发是什么 编辑:程序博客网 时间:2024/06/06 00:02
问题:
- 可以通过String类型的方法名调度方法么?
- 可以获得特定的类么?比如当前类,隔壁的类,类的新实例,当前实例?
- 多态的函数具有相同的名字、不同的参数类型,如何区分呢?
- 如何获取指定类的参数类型等信息?
带着这些问题,我做了一些实践。总结如下:
答案:Java提供反射机制,java.lang.reflect.*,可以实现包含不限于以上功能。
下面是一些常用的通过反射获取类、调用方法的例子。关于成员、构造器的调用同理可得。想了解更多,可以查看接口文档。
- package com.taobao.tuisi;
- public class Actions{
- public void tempMethod(Long userId){
- System.out.println(“我是JAVA反射测试方法,我被invoke了” + userId);
- }
- public void temp() throws Exception{
- //1.获得class
- //获得类的当前实例
- Actions a = this;
- System.out.println(a);
- //输出 com.taobao.tuisi.Actionsdff89711@c2ccac
EnhancerByCGLIB - //获得指定类的新实例
- Actions b = Actions.class.newInstance();
- System.out.println(b);
- //输出 com.taobao.tuisi.Actions@1e4fede
- //
- //通过类型获得类
- Class boolType = Boolean.class;
- System.out.println(boolType);
- //输出 class java.lang.Boolean
- //
- //通过变量获得类
- String stringExample = “”;
- Class stringType = stringExample.getClass();
- System.out.println(stringType);
- //输出class java.lang.String
- //
- //由名字获得类
- Class<?> c = Class.forName(“com.taobao.tuisi.Actions”);
- System.out.println(c);
- //输出 class com.taobao.tuisi.Actions
- //
- //2.关于method
- //由函数名和参数类型得到函数
- Long userId = 9999l;
- Method method = Actions.class.getDeclaredMethod(“tempMethod”, userId.getClass());
- System.out.println(method);
- //输出 public void com.taobao.tuisi.Actions.tempMethod(java.lang.Long)
- //
- //通过类、参数值调用指定函数
- Actions actions = new Actions();
- Long args[] = new Long [1];
- args[0] = userId;
- method.invoke(actions, args);
- //输出 我是JAVA反射测试方法,我被invoke了9999
- }
- }
0 0
- JAVA反射机制获取类和方法
- JAVA反射机制获取类和方法
- Java反射机制获取/调用类的属性和方法
- java反射机制,获取类,属性,方法
- java 反射机制 之 getMethods获取所有公有方法 和 getDeclaredMethods 获取本类所有方法
- 通过Java反射机制获取对象、方法和成员变量
- Java 反射机制获取Class中的方法 和字段
- java反射机制,通过类名获取对象,通过方法名和参数调
- java反射机制,通过类名获取对象,通过方法名和参数调
- java反射机制,通过类名获取对象,通过方法名和参数调
- java反射机制,通过类名获取对象,通过方法名和参数调
- Java反射机制之获取方法信息
- JAVA 采用反射机制 获取构造方法
- java通过反射机制加载类方法和实例方法
- 反射机制--获取类的方法
- java通过反射机制取类的属性和方法
- java 通过反射机制得到类的属性和方法
- Java反射机制访问类私有方法和变量
- ReactiveCocoa Tutorial – The Definitive Introduction: Part 2/2
- MYSQL limit,offset 区别
- redis 代替 session 多服务器共享的方案梳理
- ngx lua
- Unity3D研究院之Android二次加密.so二次加密DLL(八十二)
- JAVA反射机制获取类和方法
- OS X10.11 cocoapods不能用问题
- webservice通过wsdl生成java文件命令
- nginx 日志访问量统计
- Android随笔之——Android时间、日期相关类和方法
- Genymotion - 强大好用高性能的 Android 模拟器
- [LeetCode]Isomorphic Strings
- MulticastSocket的简单使用
- Same Tree