`
xiang37
  • 浏览: 428200 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

java反射reflection应用之初始化对象

阅读更多

首先我们先写好我们的对象Person

 

 

package com.xiva.bean;

public class Person {
	private Long personId;
	private String name;
	private String password;
	private String email;
	
	public Person(){
	}
	public Long getPersonId() {
		return personId;
	}
	public void setPersonId(Long personId) {
		this.personId = personId;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	
	public String toString(){
		return this.personId + this.name + this.email + this.password;
	}
} 
 

 

有时我们从数据库中查找到一个object数组,这是我们需要一个一个将值写入到我们的对象,并保存为一个list。也许10个左右的属性你还可以接受,但是当属性达到30以上时,而且你的属性还在不断的变化。这是你的工作量可能就会大大的增加了。这是我写这个方法的背景。

 

下面看看我的处理方式:

 

 

package com.xiva.bean;

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

/**
 * 
 * @author XIVA
 *
 */
public class TempRef {

	/**
	 * @param args
	 * @throws NoSuchMethodException 
	 * @throws SecurityException 
	 * @throws InvocationTargetException 
	 * @throws IllegalAccessException 
	 * @throws IllegalArgumentException 
	 */
	public static void main(String[] args) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
		// TODO Auto-generated method stub
		Person p = new Person();
		Class<Person> clazz = Person.class;
		//获取所有属性
		Field[] field = clazz.getDeclaredFields();
		//各属性所对应的值
		Object[] values = {"2","xiva",null,"xgt@126.com"};
		
		for(int i = 0;i < field.length; i++){
			System.out.println(field[i].getName() + field[i].getType());
			String methodName = "set" + fir2Upper(field[i].getName());
			//根据方法名获取method对象
			Method setMethod = clazz.getMethod(methodName, new Class[]{ field[i].getType()});
			//执行方法,并根据各属性的类型不一样赋予相应类型的值
			if(field[i].getType().equals(Long.class))
				
				setMethod.invoke(p,  new Object[]{values[i]==null?new Long(0):Long.parseLong(values[i].toString())});
			else if(field[i].getType().equals(String.class)){
				setMethod.invoke(p,  new Object[]{values[i]==null?"":values[i].toString()});
			}
		}
		System.out.println(p);
	}

	/**
	 * 首字母大写
	 * @param property
	 * @return
	 */
	public static String fir2Upper(String property){
		String firChar = property.substring(0, 1);
		String upperChar = firChar.toUpperCase();
		String res = upperChar + property.substring(1);
		return res;
	}
}

其中有一个限制是我们必须得注意到的,就是我们的属性顺序和我们的值顺序是一一对应的,也就是说赋值时,你Person类属性声明的顺序,就是你values数组中值的顺序。

其实获取meta,是可以直接使用rowMap来实现的,但是此处我们用这种方式。

 

 

 

分享到:
评论

相关推荐

    Java Reflection In Action(英文版)

    14. **Spring框架中的反射**:在Spring框架中,反射被广泛应用于依赖注入、AOP(面向切面编程)以及Bean的初始化和销毁。 15. **JDBC与反射**:在JDBC编程中,反射用于创建数据库驱动类的实例,以及执行SQL语句。 ...

    Java Reflection in Action_PDF+sample source

    - `newInstance()`:动态创建并初始化一个类的新实例,要求该类有无参数的构造器。 - 构造器的反射:通过`Constructor`类获取并调用不同参数的构造器。 3. **访问和修改字段**: - `getDeclaredField()`和`...

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

    1. **静态内部类**:创建一个静态内部类,在类加载时初始化,存储反射对象。由于静态内部类只会在类加载时初始化一次,因此可以确保缓存的唯一性。 ```java public class ReflectionUtil { private static class ...

    Java Reflection In Action

    - **配置管理**:使用反射根据配置文件动态创建和初始化对象,提高代码的可配置性和可维护性。 - **测试框架**:反射技术在单元测试框架(如JUnit)中用于动态加载和执行测试方法。 - **框架开发**:Spring框架中...

    JAVA反射机制详解

    // 加载并初始化命令行参数指定的类 Class classType = Class.forName(args[0]); // 获得类的所有方法 Method methods[] = classType.getDeclaredMethods(); for (int i = 0; i ; i++) { System.out.println...

    java的反射机制

    // 加载并初始化命令行参数指定的类 Class&lt;?&gt; classType = Class.forName(args[0]); // 获得类的所有方法 Method[] methods = classType.getDeclaredMethods(); for (Method method : methods) { System.out....

    java反射

    // 加载并初始化命令行参数指定的类 Method methods[] = classType.getDeclaredMethods(); // 获取类的所有方法 for (int i = 0; i ; i++) { System.out.println(methods[i].toString()); // 打印方法信息 } }...

    一个采用反射进行数据对象的装载Filling Data objects using Reflection程序源码

    无需预先知道对象的属性,只要知道数据的结构,就可以用反射来实现对象的创建和初始化。 然而,反射也有其潜在的风险和性能问题。由于它涉及了运行时的类型检查和访问控制,因此比直接调用方法或访问字段慢。此外,...

    完整版缓存CacheManagerDemo+通过反射获取对象

    缓存管理器是负责创建、初始化、管理和销毁缓存对象的组件。它提供了添加、删除、更新和检索缓存项的方法,并控制缓存的大小、过期策略等。在本示例中,CacheManagerDemo可能包含一个自定义的缓存管理器类,负责...

    java反射机制.pdf

    Java反射机制是Java编程语言中的一种强大的工具,它允许程序在运行时检查和操作类、接口、对象等的内部结构。这一机制的核心在于Java Reflection API,包含了一系列的类和接口,如`Class`, `Field`, `Method`, `...

    java 反射得到某个方法

    在Java编程语言中,反射(Reflection)是一种强大的工具,它允许程序在运行时检查和操作类、接口、字段以及方法等对象。通过反射,开发者可以动态地获取类的信息并调用其方法,即使这些方法在编译时并不知道。本文将...

    Java语言的反射机制

    通过`Class.forName()`加载并初始化类,然后使用`getDeclaredMethods()`获取所有声明的方法。此示例展示了基本的反射应用,如动态获取方法列表。 **ReflectTester 类**进一步演示了反射API的使用。其`copy(Object ...

    java反射及动态代理

    通过本文的学习,我们深入了解了Java反射机制的基本概念、应用以及其实现细节。同时,我们也探讨了动态代理机制的工作原理及其在实际开发中的应用场景。这些技术都是Java开发者必须掌握的关键技能之一,能够极大地...

    java反射例子 希望可以帮助大家

    以下是对标题和描述中提及的Java反射知识点的详细解释: 1. **获取对象的属性**: 在Java中,通过反射可以获取对象的属性。在示例代码中,`getProperty`方法展示了如何做到这一点。首先,通过`owner.getClass()`...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     B.2 运用反射机制来持久化Java对象 附录C 用XDoclet工具生成映射文件  C.1 创建带有@hibernate标记的Java源文件  C.2 建立项目的目录结构  C.3 运行XDoclet工具 附录D 发布和运行netstore应用  D.1 运行...

Global site tag (gtag.js) - Google Analytics