`
lijunaccp
  • 浏览: 160705 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

几个简单的反例示例

阅读更多
准备条件:
1. 创建工程Reflection
示例1:
DumpMethods.java
package com.test;

import java.lang.reflect.Method;

public class DumpMethods {

	//从命令行接受一个字符串(该字符串是某个类的全名)
	//打印出该类中的所有方法声明
	public static void main(String[] args) throws ClassNotFoundException {
		
		//Class类是Java反射的入口点
		Class<?> classType=Class.forName(args[0]);
		
		Method[] methods=classType.getDeclaredMethods();
		
		for(Method method : methods){
			System.out.println(method);
		}
		
	}

}


示例2
InvokeTester.java
package com.test;

import java.lang.reflect.Method;

public class InvokeTester {

	public int add(int param1,int param2){
		return param1+param2;
	}
	
	public String echo(String msg){
		return "hello:"+msg;
	}
	
	public static void main(String[] args) throws Exception {
		
		//会获得InvokeTester类所对应的Class对象
		Class<?> classType=InvokeTester.class;

		Object invokeTester=classType.newInstance();
		
		//以上两行代码等价于
		//InvokeTester i=new InvokeTester();
		
		Method addMethod=classType.getMethod("add", new Class[]{int.class,int.class});
		
		Object result=addMethod.invoke(invokeTester, new Object[]{1,2});
		
		//以上两行代码等价于
		//i.add(1,2);
		
		System.out.println((Integer)result);
		
		Method echoMethod=classType.getMethod("echo", new Class[]{String.class});
		
		Object result2=echoMethod.invoke(invokeTester, new Object[]{"world"});
		
		//以上两行代码等价于
		//i.echo("world");
		
		System.out.println((String)result2);
		
	}

}


示例3
ReflectTester.java
package com.test;

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

public class ReflectTester {

	public Object copy(Object obj) throws Exception {

		Class<?> classType = obj.getClass();

		System.out.println(classType.getName());

		Object objectCopy = classType.getConstructor(new Class[] {})
				.newInstance(new Object[] {});

		Field[] fields = classType.getDeclaredFields();

		for (Field field : fields) {
			String fieldName = field.getName();

			//获得属性首字母并转换为大写
			String firstLetter = fieldName.substring(0, 1).toUpperCase();

			//获得和属性对应的getXXX()方法的名字
			String getMethodName = "get" + firstLetter + fieldName.substring(1);
			//获得和属性对应的setXXX()方法的名字
			String setMethodName = "set" + firstLetter + fieldName.substring(1);

			Method getMethod = classType.getMethod(getMethodName, new Class[] {});

			Object value = getMethod.invoke(obj, new Object[] {});

			Method setMethod = classType.getMethod(setMethodName, new Class[] { field
					.getType() });

			setMethod.invoke(objectCopy, new Object[] { value });
		}

		return objectCopy;
	}

	public static void main(String[] args) throws Exception {
		Customer cust = new Customer();
		cust.setId(new Long(1));
		cust.setName("张三");
		cust.setAge(22);

		Customer copycust = (Customer) new ReflectTester().copy(cust);

		System.out.println(copycust.getId() + ":" + copycust.getName() + ":"
				+ copycust.getAge());
	}

}

class Customer {
	
	public Customer(){}

	private Long id;
	private String name;
	private int age;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

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

	public int getAge() {
		return age;
	}

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

}
分享到:
评论

相关推荐

    正偶数分解两个素数之和

    ”尽管这个猜想已经历经几个世纪的研究,但至今尚未找到反例,也未有完整的证明方法。 #### 技术实现 在给定的代码中,主要涉及到了以下几个技术点: 1. **判断素数**: - 使用了一个名为`fen`的函数来判断一个...

    关于数据库DBA_范式

    根据给定的部分内容,我们可以详细探讨数据库设计中的几个主要范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)以及布尔科斯范式(BCNF)。 ### 第一范式(1NF) 第一范式是最基础的范式,它要求表中的每一列都具有...

    OpenCV_LSD.pdf

    LSD算法的实施过程通常包括以下几个步骤: 1. 预处理:对输入图像进行预处理,如灰度化和直方图均衡化,以增强图像对比度。 2. 边缘检测:使用Canny或Sobel等边缘检测算法提取初步的边缘信息。 3. 线段候选生成:...

    安源2017年事业编招聘考试真题及答案解析整理版.docx

    根据给定文件的信息,我们可以从中提炼出以下几个知识点: ### 知识点1:语言表达准确性 **描述**:题目考察的是考生对汉语句子结构和语义准确性的理解能力。 **内容**: - 题目提供了四个选项,要求判断哪个选项的...

    ch6机器学习与知识发现人工智能课程.pptx

    记忆学习是一种简单的符号学习方法,它需要几种能力:(1)能实现有组织的存储信息。(2)能进行信息综合。(3)能控制检索方向。当存储对象愈多时,其中可能有多个对象与给定的查询对象相似。 示例学习是符号学习...

    三角形全等易错题析.doc

    三角形全等是初中几何中的核心概念,主要涉及以下几个方面: 1. **全等三角形的判定**: - SAS (边-边-边):如果两个三角形的两边及其夹角分别相等,那么这两个三角形全等。 - ASA (角-边-角):如果两个三角形的...

    Python 的字典(Dict)是如何存储的

    在深入探讨Python字典的存储原理之前,我们先来明确几个概念。字典是Python中的一种内置数据结构,它以键值对的形式存储数据。由于其高效的数据查找性能,字典被广泛应用于各种场景。那么,究竟是什么使得Python字典...

    演示文稿4.ppt————电子版_ppt版

    以给定的示例为例,我们有一个例子集,其中包括几个特征,如Fever、Cough、X-ray、ESR和Ausculation。在第一轮中,经过排序和筛选,选择了最优的两个表达式放入CONSISTENT表,最终选出了[Ausculation=bubblelike]...

    《概率论与数理统计》习题一课后答案剖析.ppt

    1.3 部分介绍了几个随机事件的样本空间: (1) 掷一颗均匀的骰子两次,观察前后两次出现的点数之和。样本空间包含所有可能的点数对,总共有36种可能的结果(6 * 6)。 (2) 同样是掷骰子两次,但这次关注的是点数本身...

    AI-900-91Q微软考试认证考题.pdf

    根据给定文件的信息,我们可以提炼出以下几个重要的知识点: ### 1. AI-900 Microsoft Azure AI Fundamentals 认证概述 **AI-900** 是一项由微软提供的认证考试,旨在验证考生对 **Microsoft Azure AI ...

    《离散数学》课后答案。(修订版)耿素云、屈婉玲著。高等教育出版社。

    以上仅为几个例子,实际上《离散数学》这门课程涵盖了极其丰富的知识点,每一个章节都有其独特的理论体系和实际应用场景。通过系统学习这些内容,不仅可以增强解决实际问题的能力,还能为深入学习计算机科学领域的...

    分类器训练

    每一级通常包含一个或多个简单的弱分类器。 #### 三、Boosting算法 目前常见的Boosting算法有以下几种: 1. **Discrete Adaboost**:基于Adaboost的一种经典实现,通过加权投票的方式整合多个弱分类器。 2. **...

    2021 年春硕士研究生 机器学习 试题.docx

    根据给定文件的信息,我们可以提炼出以下几个主要的知识点: ### 1. 候选消除算法(Candidate Elimination Algorithm) **定义与应用:** - **背景介绍:** 候选消除算法是一种用于构建概念学习系统的算法,适用于...

    Python重点知识解析

    本文档旨在帮助读者深入理解Python编程语言中与脚本开发密切相关的几个核心概念和技术。通过学习这些知识点,可以提升开发者在实际项目中的编码效率及代码质量。 ##### 前提条件 为了更好地理解和吸收本文档内容,...

    z3-soursecode

    在提供的压缩包文件中,我们可以看到以下几个关键组成部分: 1. `configure.ac`:这是GNU Autoconf的配置脚本,用于自动生成Makefile,以适应不同的操作系统和编译环境。 2. `README`:通常包含项目的基本信息、...

    c#编码规范.pdf

    - **反例**:对此规则或建议给出的错误示例。 此外,规范中并没有给出具体的缩略语定义,但在实际开发过程中可能会遇到一些常用的缩略语,例如: - **API**:Application Programming Interface(应用程序编程接口...

    互联网JAVA开发规范

    - 反例:`t_id`,其中“t”可能代表“topic”或“teacher”,没有具体的上下文很难确定其准确含义。 3. **限制单词数量**:变量名或类名中最多包含三个单词,如果超出这个限制,则意味着它可能承担了过多的职责,...

    roc.zip_Matlab ROC_roc_roc curve_信号ROC曲线_检测ROC

    在Matlab中实现ROC曲线,首先我们需要理解以下几个关键概念: 1. **真阳性率(TPR)**:也称为灵敏度或召回率,是指真正例占所有实际正例的比例。计算公式为:TPR = TP / (TP + FN),其中TP表示真正例,FN表示假反例...

Global site tag (gtag.js) - Google Analytics