JAVA反射机制的几种实现
来源:互联网 发布:社会网络理论有什么用 编辑:程序博客网 时间:2024/05/20 14:43
<pre name="code" class="java">package com.user.test;import java.lang.reflect.Method;/** * java反射练习 * @author lizhixian * @version 1.0 * @create_date 2015-7-15 下午2:38:34 */public class InvokeTest {public void testInvoke(String name){System.out.println("welcome:"+name);}public void testInvoke(){System.out.println("welcome:haha");}public static void testStatic(String name){System.out.println("welcome static:"+name);}/** * 通过类字符串名调用 * @param className 类完整路径 */public void newClass(String className){try {Object obj = Class.forName(className).newInstance();//Method method = obj.getClass().getMethod("testInvoke",new Class[]{String.class});//只能调用公有方法String paramType = "java.lang.String";//参数类型Method method = obj.getClass().getDeclaredMethod("testInvoke",new Class[]{Class.forName(paramType).newInstance().getClass()});method.invoke(obj,new Object[]{"lzx"});} catch (Exception e) {e.printStackTrace();}}/** * 通过泛型调用 * @param <T> 类 XXX.class * @param methodName 方法名 */public <T> void newClass(Class<T> cls,String methodName){try {Method method = cls.getDeclaredMethod(methodName,new Class[]{});method.invoke(cls.newInstance(),new Object[]{});} catch (Exception e) {e.printStackTrace();}}/** * 调用静态方法 * @param className 类完整路径 * @param methodName 方法名 * @param args 该方法对应的参数 */public Object invokeStaticMethod(String className, String methodName, Object[] args){ Object retObj = null;try {Class<?> ownerClass = Class.forName(className); Class<?>[] argsClass = new Class[args.length]; for (int i = 0, j = args.length; i < j; i++) { argsClass[i] = args[i].getClass(); } Method method = ownerClass.getDeclaredMethod(methodName,argsClass); retObj = method.invoke(null, args); } catch (Exception e) {e.printStackTrace();} return retObj;}/** * 调用除静态静态方法外的其他方法 */public <T> Object invokeMethod(Class<T> owner, String methodName, Object[] args){ Object retObj = null;try { Class<?>[] argsClass = new Class[args.length]; for (int i = 0, j = args.length; i < j; i++) { argsClass[i] = args[i].getClass(); } Method method = owner.getDeclaredMethod(methodName,argsClass); retObj = method.invoke(owner, args); } catch (Exception e) {e.printStackTrace();}return retObj;}public static void main(String[] args) {InvokeTest test = new InvokeTest();test.newClass("com.user.test.InvokeTest");test.newClass(InvokeTest.class,"testInvoke");test.invokeStaticMethod("com.user.test.InvokeTest","testStatic",new Object[]{"lzx"});test.invokeMethod(InvokeTest.class,"testStatic",new Object[]{"lsl"});}}
0 0
- JAVA反射机制的几种实现
- Java反射机制的几点用法
- 反射机制 java实现
- java反射机制的简单实现步骤
- java反射机制的实现原理 (一)
- java反射机制的实现原理
- java反射机制的实现原理
- java反射机制的实现原理
- java反射机制的实现原理
- java反射机制的实现原理
- Java反射实现几种方式
- 浅析JAVA反射机制的几点功能
- java反射机制的实现原理 (二)安全性和反射
- java中反射机制及其类加载的几种方式的异同
- 反射机制的实现
- Java中实现多线程并发的几种安全机制
- java同步机制的几种实现方式
- 反射实现的几种方法
- 华为机试:添加符号使等式成立
- openerp/odoo权限设置总结
- ASP.NET mvc异常处理的方法
- win7不用破解工具,最简单的去黑屏办法
- 小憩
- JAVA反射机制的几种实现
- 1.画图相关
- 改革能给中国足球带来希望吗?
- 牛顿法、雅克比矩阵、海森矩阵
- 昂贵的聘礼 1062 (最短路(单向)+建图)
- Spring 入门教程(二) 生命周期和作用域
- Android 性能优化典范 三
- 未能加载文件或程序集“Newtonsoft.Json,Version=4.5.0.0 问题?
- 实习笔记3