`

反射的基础用法

J# 
阅读更多

import java.lang.reflect.Array;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;


/**
 * Java Reflection Cookbook
 *
 * 
@author Michael Lee
 * 
@since 2006-8-23
 * 
@version 0.1a
 
*/

public class Reflection {
    
/**
     * 得到某个对象的公共属性
     *
     * 
@param owner, fieldName
     * 
@return 该属性对象
     * 
@throws Exception
     *
     
*/
    
public Object getProperty(Object owner, String fieldName) throws Exception {
        Class ownerClass 
= owner.getClass();

        Field field 
= ownerClass.getField(fieldName);

        Object property 
= field.get(owner);

        
return property;
    }

    
/**
     * 得到某类的静态公共属性
     *
     * 
@param className   类名
     * 
@param fieldName   属性名
     * 
@return 该属性对象
     * 
@throws Exception
     
*/
    
public Object getStaticProperty(String className, String fieldName)
            
throws Exception {
        Class ownerClass 
= Class.forName(className);

        Field field 
= ownerClass.getField(fieldName);

        Object property 
= field.get(ownerClass);

        
return property;
    }


    
/**
     * 执行某对象方法
     *
     * 
@param owner
     *            对象
     * 
@param methodName
     *            方法名
     * 
@param args
     *            参数
     * 
@return 方法返回值
     * 
@throws Exception
     
*/
    
public Object invokeMethod(Object owner, String methodName, Object[] args)
            
throws Exception {

        Class ownerClass 
= owner.getClass();

        Class[] argsClass 
= new Class[args.length];

        
for (int i = 0, j = args.length; i < j; i++) {
            argsClass[i] 
= args[i].getClass();
        }

        Method method 
= ownerClass.getMethod(methodName, argsClass);

        
return method.invoke(owner, args);
    }


      
/**
     * 执行某类的静态方法
     *
     * 
@param className
     *            类名
     * 
@param methodName
     *            方法名
     * 
@param args
     *            参数数组
     * 
@return 执行方法返回的结果
     * 
@throws Exception
     
*/
    
public Object invokeStaticMethod(String className, String methodName,
            Object[] args) 
throws Exception {
        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.getMethod(methodName, argsClass);

        
return method.invoke(null, args);
    }



    
/**
     * 新建实例
     *
     * 
@param className
     *            类名
     * 
@param args
     *            构造函数的参数
     * 
@return 新建的实例
     * 
@throws Exception
     
*/
    
public Object newInstance(String className, Object[] args) throws Exception {
        Class newoneClass 
= Class.forName(className);

        Class[] argsClass 
= new Class[args.length];

        
for (int i = 0, j = args.length; i < j; i++) {
            argsClass[i] 
= args[i].getClass();
        }

        Constructor cons 
= newoneClass.getConstructor(argsClass);

        
return cons.newInstance(args);

    }
  
    
/**
     * 是不是某个类的实例
     * 
@param obj 实例
     * 
@param cls 类
     * 
@return 如果 obj 是此类的实例,则返回 true
     
*/
    
public boolean isInstance(Object obj, Class cls) {
        
return cls.isInstance(obj);
    }
    
    
/**
     * 得到数组中的某个元素
     * 
@param array 数组
     * 
@param index 索引
     * 
@return 返回指定数组对象中索引组件的值
     
*/
    
public Object getByArray(Object array, int index) {
        
return Array.get(array,index);
    }
}

分享到:
评论

相关推荐

    .net 反射的用法

    下面将详细介绍.NET反射的基础知识以及如何使用反射来实现常见的任务。 #### 三、反射的基本操作 根据题目提供的代码示例,我们可以了解到反射的一些基本操作: 1. **加载程序集**:使用`System.Reflection....

    C#反射基础学习

    C#反射是.NET框架提供的一种强大机制,它允许在运行时检查和操作程序集、类型、接口、方法、属性等元数据。通过反射,开发者可以在程序执行过程中动态地获取类型信息,并实例化对象、调用方法或访问字段。这篇学习...

    反射基础思维导图

    内含反射的定义,反射的价值,,反射使用的方法以及xml文件的定义,价值,特点详解

    c#反射例子的用法(

    创建完实例后,还可以继续使用反射来调用该实例的方法。 ```csharp type.GetMethod("TestMethod3").Invoke(test, new object[] { "bbb" }); ``` 这里再次调用了`TestMethod3`方法,并将创建的实例`test`作为...

    VR材质反射基础.docx

    本文将深入探讨VR材质的反射基础,以及如何通过一系列步骤来设置和优化反射效果。 首先,我们要理解VR材质中的全局开关(Global switches)。"Default lights"选项控制是否使用场景中的默认灯光。关闭这个选项意味...

    5565系列反射内存卡使用入门

    综上所述,5565系列反射内存卡的使用入门包括了对反射内存卡基础知识的理解、硬件和软件的安装、驱动程序的设置、LED指示灯状态的解读、自带测试程序的使用以及开发文档的下载与参考。掌握这些基础知识和技能,可以...

    javaf反射的一些方法介绍,使用和讲解

    提供的压缩包文件中包含"反射的课堂笔记.wps",很可能是详细的反射学习笔记,包括基础概念和例子。而其他"exercises01"至"exercises07"可能是一系列的练习题目或代码示例,帮助加深对反射的理解和应用。 总的来说,...

    Java反射机制的使用和学习方法

    - 实践操作:通过编写实际代码,体验反射的使用,例如动态调用方法、访问私有成员等。 - 阅读源码:研究知名框架如Spring中的反射使用,理解其应用场景和实现方式。 - 案例分析:分析和解决实际问题,比如如何...

    JAVA反射机制的入门代码

    总的来说,"JAVA反射机制的入门代码"是初学者理解Java反射机制的好教材,通过它,你可以学习如何动态地操作Java类,提高代码的灵活性,并掌握处理`properties`文件的基础方法。在深入学习和实践中,你将进一步理解...

    【IT十八掌徐培成】Java基础第25天-01.反射基础.zip

    反射基础”这一课程中,徐培成老师会深入讲解这个核心概念。 反射的基石是`java.lang.Class`类,它代表了Java运行时的类型信息。通过`Class`对象,我们可以获取类的构造器、方法、字段等信息,甚至可以在运行时动态...

    学习使用Go反射的用法示例

    如果变量是复杂类型(如指针、切片、映射、通道或数组),我们可以使用Elem()方法来获取基础类型的类型信息。对于结构体类型,可以使用NumField()和Field()方法来获取结构体的字段数量和字段的具体信息。Field()方法...

    多层膜反射率的计算 (2011年)

    而这一切的基础都是对每层薄膜反射率的准确计算。 本文所述的研究和编程方法,为光学薄膜的设计和性能预测提供了强有力的工具。随着计算技术的发展和光学应用领域的拓展,对多层膜反射率的准确计算和分析将变得...

    一种多层膜反射镜反射率的测量方法

    测量方法可能包括使用同步辐射光源(Synchrotron Radiation Source, SRS)或激光等X射线源发出的单色X射线照射到多层膜样品上,然后通过探测器测量反射光强度。通过改变入射角、波长、极化状态等参数,可以对多层膜...

    C++反射机制实现

    具化是实现反射的基础,它使得程序能够动态地操纵类型信息和方法。 由于Java和.NET平台上反射技术的成功应用,反射技术从理论研究走向了实用阶段,动态获取和调整系统行为的能力得到了强化。动态反射技术尤其在需要...

    JAVA基础--JAVA中的反射机制详解

    在 Java 中,可以使用反射机制来获取对象的属性。例如,以下代码可以获取某个对象的属性: ```java public Object getProperty(Object owner, String fieldName) throws Exception { Class ownerClass = owner....

    2020老杜最新Java零基础进阶视频教程-反射机制课件

    此外,反射操作比直接调用方法要慢,因为它涉及到了运行时的类查找和权限检查,因此在性能敏感的代码中应避免过度使用。 总结来说,Java反射机制是Java面向对象特性的重要补充,它允许程序在运行时动态地获取和修改...

    java反射入门

    反射还可以用于动态创建对象,使用 `newInstance()` 方法: ```java Object obj = c.newInstance(); ``` 这要求类有一个无参构造器,否则会抛出异常。 7. 访问和调用成员 反射允许访问类的字段(field)和...

    JAVA基础-反射-枚举

    ### JAVA基础-反射-枚举知识点详解 #### 一、反射概述 反射是Java语言提供的一种能在运行时分析类和对象的能力。通过反射,我们可以在程序运行时动态地获取类的信息(如类名、方法、构造函数等)并操作这些信息。 ...

    C# 反射举例 反射实例

    这个例子展示了如何使用反射创建一个类的实例,设置和获取属性值,以及调用方法。尽管反射功能强大,但也有一些注意事项: - **性能**:反射通常比直接的代码执行慢,因为它涉及到运行时查找和调用。在性能敏感的...

    java反射,获取所有属性、方法以及List集合类

    本篇文章将深入探讨如何使用Java反射来获取一个类的所有属性、方法,并处理List集合类。 首先,让我们了解Java反射的基础概念。在Java中,`java.lang.Class`类代表运行时的类信息。我们可以使用`Class.forName()`...

Global site tag (gtag.js) - Google Analytics