`
fys124974704
  • 浏览: 137371 次
  • 性别: Icon_minigender_1
  • 来自: 火星
社区版块
存档分类
最新评论

java反射---我之见解

    博客分类:
  • Java
阅读更多

最近在做一个项目,开始就没打算使用反射,但是做着做着,发现有很多代码相同!感觉很郁闷,还有很多地方需要运行时才定义的类型,这让我不禁想起了反射,开始只是用一点,然后发现使用反射代码少了,循环多了!很多地方不用写死一个类型,可以使用反射去获取源对象,越做就感觉越好用,甚至连对象封装我都放弃了apache的BeanUtils,自己去写一个封装的方法,可能性能和优势都不够别人强,但是爆出异常至少我可以控制到!这个是使用框架无法做到的!
所以我觉得,作为一个优秀的程序员,需要懂得反射,会用反射,如果作为一个架构师,需要精通反射!有了反射可以让代码更少,让代码的复用性更高更容易维护!而且会减少模块和模块之间的耦合,进一步做到了低耦合高内聚!

 

public class DemoBean {
	private String name;
	private String engName;
	private int age;
	private String dept;
	private String address;
	private String phone;
	private String info;
	private String desc;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getEngName() {
		return engName;
	}

	public void setEngName(String engName) {
		this.engName = engName;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String getDept() {
		return dept;
	}

	public void setDept(String dept) {
		this.dept = dept;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	public String getPhone() {
		return phone;
	}

	public void setPhone(String phone) {
		this.phone = phone;
	}

	public String getInfo() {
		return info;
	}

	public void setInfo(String info) {
		this.info = info;
	}

	public String getDesc() {
		return desc;
	}

	public void setDesc(String desc) {
		this.desc = desc;
	}

}
 
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class Demo {
	public static void main(String[] args) throws SecurityException,
			NoSuchFieldException, NoSuchMethodException,
			IllegalArgumentException, IllegalAccessException,
			InvocationTargetException {
		DemoBean2 db = new DemoBean2();
		merge(db, getMap());
		System.out.println(db.getAge());
		System.out.println(db.getEngName());
		System.out.println(db.getDept());
		System.out.println(db.getInfo());
		System.out.println(db.getAddress());
		System.out.println(db.getPhone());
	}

	public static void merge(Object bean, Map<String, Object> map)
			throws SecurityException, NoSuchFieldException,
			NoSuchMethodException, IllegalArgumentException,
			IllegalAccessException, InvocationTargetException {
		Set<String> set = map.keySet();
		Iterator<String> it = set.iterator();
		while (it.hasNext()) {
			String fieldName = it.next();
			Field f = bean.getClass().getDeclaredField(fieldName);
			String methodName = fieldName.substring(0, 1).toUpperCase()
					+ fieldName.substring(1, fieldName.length());
			Method m = bean.getClass().getDeclaredMethod("set" + methodName,
					f.getType());
			m.invoke(bean, map.get(fieldName));
		}
	}

	public static Map<String, Object> getMap() {
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("engName", "vincent");
		map.put("age", 12);
		map.put("dept", "Boss");
		map.put("address", "中国北京");
		map.put("phone", "12450358357");
		map.put("info", "this is infomation");
		return map;
	}
}

 

    利用反射去封装一个实体,这样无论你在map里面放入多少个元素都和可以完整的封装到实体里面,用别的方法就比较难实现了!

分享到:
评论
2 楼 hnzuoxian 2009-01-05  
1 楼 huaiwen 2008-09-29  
[img][/img]

相关推荐

    Javafanshe.rar_java 反射_java反射_反射_反射机制

    《Java反射.txt》可能是对这些概念的详细讲解,而《www.pudn.com.txt》可能是来源于某个在线技术社区的讨论或教程,提供了额外的见解和实践应用。学习并理解这些内容,将有助于深入掌握Java的反射机制,提升编程灵活...

    java教程-清华版,非常全,非常好

    7. **反射机制**:反射是Java的一大特色,允许在运行时检查类的信息并动态操作类的对象。它在插件开发、序列化、动态代理等方面有广泛应用。 8. **网络编程**:Java的Socket编程是实现网络应用的基础,包括TCP和UDP...

    Manning - Java Reflection in Action.pdf

    《Java反射技术实战》这本书的独特之处在于它不仅详细解释了反射的各种编程技巧,还提供了足够的背景知识,让读者理解如何扩展和变化这些技巧。书中克服了反射作为神秘和深奥哲学追求的形象,也避免了一套混乱且容易...

    Java Reflection In Action

    《Java反射技术实战》这本书由Ira R. Forman和Nate Forman撰写,由MANNING出版社出版,是一本深入探讨Java反射机制及其在实际编程中的应用的专业书籍。本书的独特之处在于它不仅展示了反射机制所能实现的各种酷炫...

    thinking-in-java_java_in_ThinkinginJava_

    《Thinking in Java》是Bruce Eckel的经典之作,它深度探讨了Java编程语言的各个方面,是许多Java程序员必备的参考书籍。这本书以其详尽的解释、丰富的示例和深入的理论见解,深受全球开发者喜爱。"java in Thinking...

    java代码-06 赵搏辉

    12. **标准库**:Java提供丰富的标准库,如IO、NIO(New IO)、XML处理、网络编程、反射、泛型等,方便开发者快速构建功能。 13. **JDBC**:Java Database Connectivity允许Java程序连接到数据库,执行SQL语句,...

    Java解惑 清晰版带书签

    根据提供的文件信息,“Java解惑 清晰版带书签”这一标题暗示这是一本深入探讨Java编程语言中常见问题及解决...它适合各个层次的Java开发者阅读,无论是初学者还是有一定经验的开发人员都能从中获得宝贵的见解和灵感。

    Thinking in Java 4中文txt格式

    - **面向对象特性**:分析Java相对于C++在面向对象方面的改进之处。 - **安全性**:探讨Java如何通过沙箱模型等技术提供更好的安全保护。 - **跨平台性**:解释Java“一次编写,到处运行”的理念及其背后的原理。 #...

    java四大名著pdf

    Java是全球最流行的编程语言之一,尤其在企业级应用开发领域有着广泛的运用。"Java四大名著"是Java开发者心中的经典读物,它们为初学者提供了深入理解Java语言和技术体系的宝贵资源。以下是对这些书籍内容的详细概述...

    清华大学java教材

    描述中的“我收集的好东西,自己觉着很棒”暗示这份教材不仅全面,而且质量上乘,可能包含了作者或收集者的独特见解和实践经验,对于学习者来说是一份极具价值的学习材料。清华大学作为中国顶尖的高等学府,其教育...

    java1.7源码包含sun

    在Java 7中,"sun"包的源码提供了以下关键领域的见解: 1. **NIO.2(New IO 2.0)**:Java 7引入了NIO的第二个版本,提供了更强大、更灵活的I/O操作,例如Path类,用于处理文件路径,以及Files类,提供了一系列静态...

    传智JAVA 12月

    7. **反射机制**:掌握Java反射API,能够在运行时动态地获取类的信息并操作类的对象。 8. **JVM原理**:理解Java虚拟机的工作机制,包括内存模型、垃圾回收、类加载机制等。 9. **设计模式**:介绍常见的设计模式,...

    JAVA教程(原上课用PPT版)

    最后,Java的标准库(Java API)提供了大量预定义的类和方法,PPT教程会引导学习者了解和使用这些类库,如日期时间API、反射机制、泛型等。 总的来说,"JAVA教程(原上课用PPT版)"涵盖了Java编程的各个方面,从...

    jndi 反射 耦合

    在IT行业中,"jndi 反射 耦合"是三个重要的概念,它们分别涉及Java命名和目录接口(JNDI)、反射机制以及软件设计中的耦合性。接下来,我们将深入探讨这三个主题,以期提供有价值的见解。 首先,JNDI(Java Naming ...

    java编程语言英文第四版

    《Java编程语言英文第四版》是由Java之父James Gosling与Ken Arnold和David Holmes共同编写的权威教程,针对中高级开发者,旨在深入介绍Java SE7语言及其核心库。这本书是全球开发者快速掌握Java编程语言、理解其...

    Thinking in Java 3rd Edition(源代码)

    《Thinking in Java》是Bruce Eckel的经典之作,它以其深入浅出的方式讲解了Java编程语言的各个方面。第三版是该书的重要更新,包含了作者对于Java语言理解的最新见解和实践。这个压缩包文件包含了书中所有示例代码...

    JAVA学习笔记达内内部使用,保证你没有看过

    这篇笔记是针对Java初学者和有一定经验的开发者设计的,由达内教育内部使用的资源,涵盖了从基础到进阶的全面内容,确保提供了一些鲜为人知的见解和深入理解。笔记分为四个主要部分,分别由不同的专家主讲,包括五天...

Global site tag (gtag.js) - Google Analytics