`

java 经典反射类加测试类

阅读更多
反射类
package util;

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

import test.web.example.PP;
/**
 * 
 * @author peidw
 *
 */

public class Reflection {
    
    /**
     * 取得参数对象中的公共属性
     * @param obj
     * @param fieldname
     * @return
     * @throws Exception
     */
    public Object getProperty(Object obj,String fieldname)throws Exception{
        Object result=null;
        Class objClass=obj.getClass();
        Field field=objClass.getField(fieldname);
        result=field.get(obj);
        return result;
    }
    /**
     * 获得某类的静态属性
     * @param className
     * @param fieldName
     * @return
     * @throws Exception
     */
    public Object getStaticProperty(String className,String fieldName)throws Exception{
        Class cls=Class.forName(className);
        Field field=cls.getField(fieldName);
        Object provalue=field.get(cls);
        return provalue;
    }
    /**
     * 获取参数对象的属性值
     * @param obj
     * @param propertyName
     * @return
     * @throws Exception
     */
    public Object getPrivatePropertyValue(Object obj,String propertyName)throws Exception{
        Class cls=obj.getClass();
        Field field=cls.getDeclaredField(propertyName);
        field.setAccessible(true);
        Object retvalue=field.get(obj);
        return retvalue;
    }
    
    /**
     * 执行某对象的方法
     * @param owner
     * @param methodName
     * @param args
     * @return
     * @throws Exception
     */
    public Object invokeMethod(Object owner,String methodName,Object[] args)throws Exception{
        Class cls=owner.getClass();
        Class[] argclass=new Class[args.length];
        for(int i=0,j=argclass.length;i<j;i++){
            argclass[i]=args[i].getClass();
        }
        Method method=cls.getMethod(methodName,argclass);
        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 cls=Class.forName(className);
        Class[] argclass=new Class[args.length];
        for(int i=0,j=argclass.length;i<j;i++){
            argclass[i]=args[i].getClass();
        }
        Method method=cls.getMethod(methodName,argclass);
        return method.invoke(null, args);
    }
    public Object newInstance(String className,Object[] args)throws Exception{
        Class clss=Class.forName(className);
    
        Class[] argclass=new Class[args.length];
        for(int i=0,j=argclass.length;i<j;i++){
            argclass[i]=args[i].getClass();
        }
        java.lang.reflect.Constructor cons=clss.getConstructor(argclass);
        return cons.newInstance();
    }
    public static void main(String[] args)throws Exception{
        Reflection rl=new Reflection();
        PP p=new PP();
        rl.getPrivatePropertyValue(p,"aname");
    }
}

测试类

package test.web.example;

import static org.junit.Assert.*;

import org.junit.Before;
import org.junit.Test;
import org.junit.Assert.*;
import util.Reflection;

/**
 * 
 * @author peidw
 *
 */
public class ReflectionTest {
    
    private PP pp=null;
    private Reflection reflection=null;
    @Before
    public void setUp() throws Exception {
        reflection=new Reflection();
        pp=new PP();
        
    }

    @Test
    public void testGetProperty() throws Exception{
        System.out.println(pp);
        System.out.println(reflection);
        System.out.println(reflection.getProperty(pp, "address"));
        //assertEquals(reflection.getProperty(pp, "address"), null);
        
    }

    @Test
    public void testGetStaticProperty()throws Exception{
        assertEquals(reflection.getStaticProperty("test.web.example.PP", "count"),"love you");
    }

    @Test
    public void testGetPrivatePropertyValue() throws Exception{
        assertEquals(reflection.getPrivatePropertyValue(pp, "aname"),null);
    }

    @Test
    public void testInvokeMethod() throws Exception{
        assertEquals(reflection.invokeMethod(pp, "setAddress", new Object[]{"合浦西场镇"}),null);
        assertEquals(reflection.getProperty(pp, "address"), "合浦西场镇");
    }

    @Test
    public void testInvokeStaticMethod()throws Exception {
        assertEquals(reflection.invokeStaticMethod("test.web.example.PP", "changeCount",new Object[]{"80"}),true);
        assertEquals(reflection.getStaticProperty("test.web.example.PP", "count"),"80");
    }

    @Test
    public void testNewInstance() throws Exception{
        
        Object vpp=reflection.newInstance("test.web.example.PP",new Object[]{"peidw","广州"});
        org.junit.Assert.assertNotNull(vpp);
        //assertEquals(reflection.getPrivatePropertyValue(vpp,"aname"),"peidw");
    }



}

分享到:
评论

相关推荐

    Java反射性能测试分析

    ### Java反射性能测试分析 #### 引言 Java反射机制是Java编程语言中一个强大的特性,它允许程序在运行时动态地访问、检测和修改类、接口、字段和方法等对象。然而,反射操作通常会引入额外的开销,这在性能敏感的...

    java反射 java反射 java反射java反射

    Java反射是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并操作类的对象。在Java中,反射机制提供了强大的能力,包括在运行时检查类的结构、创建对象实例、调用方法以及访问和修改字段值。...

    JAVA反射机制自定义框架测试代码

    本篇文章将深入探讨Java反射机制,并通过自定义框架的测试代码来进一步理解其应用。 首先,我们需要了解什么是反射。在Java中,反射是指在运行时,程序可以获取类、接口、字段和方法的信息,并且能够调用这些方法,...

    java 利用反射获取内部类静态成员变量的值操作.docx

    本文将详细介绍如何使用Java反射技术来获取内部类中的静态成员变量的值。 #### 二、背景知识 在深入探讨之前,我们需要了解几个基本概念: 1. **内部类**:内部类是一种特殊的类,定义在另一个类(外部类)的内部。...

    java反射工具类

    java的泛型和反射机制一直很难理解和应用,这个程序是关于反射和泛型的综合使用,主要实现获取一个类的属性名和方法,并可以获取属性值,存取属性值,属性名和属性值的字符...只是个工具类,没有写测试类,自己测试下啊

    JAVA反射机制的入门代码

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

    Java反射调用工具类

    Java反射调用是Java语言提供的一种强大的动态类型机制,它允许程序在运行时检查并使用类的信息,包括类的方法、属性以及构造器等。在Java中,反射是通过`java.lang.reflect`包中的类实现的,如`Class`、`Constructor...

    Java反射经典实例

    Java反射是Java编程语言中的一个强大特性,它允许运行时的程序访问并操作类、接口、字段和方法等信息,即使这些信息在编译时并未明确知晓。在Java中,反射通常通过`java.lang.Class`类和相关的API来实现。本实例将...

    Java方法反射调用demo

    Java反射是Java编程语言中的一个强大特性,它允许在运行时检查类、接口、字段和方法的信息,并且能够在运行时动态地创建对象和调用方法。这个特性使得Java具有了高度的灵活性,常用于框架开发、插件系统、元编程等...

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

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

    Java反射机制测试Demo

    `FangseTest`可能是本次Demo中的主要测试类,可能包含了反射机制的各种使用示例,例如动态调用方法、访问私有成员、遍历类的继承结构等。在实际阅读和理解代码时,可以重点关注这些关键点,同时注意代码的组织结构,...

    java反射基本方法测试

    总结,Java反射提供了强大的能力来探索和操作运行时的类结构。它允许我们在不了解具体类型的情况下创建和操作对象,这在编写动态、灵活的代码时非常有用。然而,由于其潜在的安全风险和性能影响,应该谨慎使用。在`...

    java之反射优化(缓存思路)源码

    在Java编程中,反射(Reflection)是一个强大的工具,它允许我们在运行时检查和操作类、接口、字段和方法。然而,反射操作通常比直接的Java代码执行慢,因为它涉及到动态类型检查和方法调用。因此,为了提高性能,...

    java面试题--反射机制

    掌握Java反射机制对于开发者来说是非常有价值的,尤其是在开发框架、自动化测试等方面的应用。 #### 十、参考资料 - [Oracle官方文档](https://docs.oracle.com/javase/tutorial/reflect/) - [Effective Java]...

    Java反射机制经典案例

    Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、字段和方法的信息,甚至能够在不知道具体类名的情况下创建和调用对象的方法。这为程序员提供了高度的灵活性和动态性,使得Java...

    java例子 java反射

    在Java反射中,访问类的字段和方法也十分灵活。`getFields()`返回所有public字段,`getField()`获取指定名称的public字段。对于私有或其他访问修饰符的字段,可以使用`getDeclaredFields()`和`getDeclaredField()`。...

    Java 1.5 反射机制

    Java 1.5引入的反射机制是其动态性的一个重要体现,它允许程序在运行时检查和操作类、接口、对象及其方法。反射为开发者提供了强大的能力,可以在不知道具体类名的情况下实例化对象,调用方法,访问字段,以及处理...

    反射实例-JAVA反射机制

    在Java反射中,针对类的不同组成部分(构造函数、字段和方法),`java.lang.Class`类提供了多种反射调用方式来获取信息。以下是几种常用的反射调用: - **获取构造函数**:`Constructor getConstructor(Class[] ...

    java反射-英文版反射规范

    Java反射广泛应用于框架开发、动态代理、测试工具等领域。例如,在Spring框架中,反射被用来动态创建对象和调用方法;在Hibernate等ORM框架中,反射用于处理数据库记录与Java对象之间的映射关系。 #### 三、反射...

Global site tag (gtag.js) - Google Analytics