准备条件:
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`的函数来判断一个...
根据给定的部分内容,我们可以详细探讨数据库设计中的几个主要范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)以及布尔科斯范式(BCNF)。 ### 第一范式(1NF) 第一范式是最基础的范式,它要求表中的每一列都具有...
LSD算法的实施过程通常包括以下几个步骤: 1. 预处理:对输入图像进行预处理,如灰度化和直方图均衡化,以增强图像对比度。 2. 边缘检测:使用Canny或Sobel等边缘检测算法提取初步的边缘信息。 3. 线段候选生成:...
根据给定文件的信息,我们可以从中提炼出以下几个知识点: ### 知识点1:语言表达准确性 **描述**:题目考察的是考生对汉语句子结构和语义准确性的理解能力。 **内容**: - 题目提供了四个选项,要求判断哪个选项的...
记忆学习是一种简单的符号学习方法,它需要几种能力:(1)能实现有组织的存储信息。(2)能进行信息综合。(3)能控制检索方向。当存储对象愈多时,其中可能有多个对象与给定的查询对象相似。 示例学习是符号学习...
三角形全等是初中几何中的核心概念,主要涉及以下几个方面: 1. **全等三角形的判定**: - SAS (边-边-边):如果两个三角形的两边及其夹角分别相等,那么这两个三角形全等。 - ASA (角-边-角):如果两个三角形的...
在深入探讨Python字典的存储原理之前,我们先来明确几个概念。字典是Python中的一种内置数据结构,它以键值对的形式存储数据。由于其高效的数据查找性能,字典被广泛应用于各种场景。那么,究竟是什么使得Python字典...
以给定的示例为例,我们有一个例子集,其中包括几个特征,如Fever、Cough、X-ray、ESR和Ausculation。在第一轮中,经过排序和筛选,选择了最优的两个表达式放入CONSISTENT表,最终选出了[Ausculation=bubblelike]...
1.3 部分介绍了几个随机事件的样本空间: (1) 掷一颗均匀的骰子两次,观察前后两次出现的点数之和。样本空间包含所有可能的点数对,总共有36种可能的结果(6 * 6)。 (2) 同样是掷骰子两次,但这次关注的是点数本身...
根据给定文件的信息,我们可以提炼出以下几个重要的知识点: ### 1. AI-900 Microsoft Azure AI Fundamentals 认证概述 **AI-900** 是一项由微软提供的认证考试,旨在验证考生对 **Microsoft Azure AI ...
以上仅为几个例子,实际上《离散数学》这门课程涵盖了极其丰富的知识点,每一个章节都有其独特的理论体系和实际应用场景。通过系统学习这些内容,不仅可以增强解决实际问题的能力,还能为深入学习计算机科学领域的...
每一级通常包含一个或多个简单的弱分类器。 #### 三、Boosting算法 目前常见的Boosting算法有以下几种: 1. **Discrete Adaboost**:基于Adaboost的一种经典实现,通过加权投票的方式整合多个弱分类器。 2. **...
根据给定文件的信息,我们可以提炼出以下几个主要的知识点: ### 1. 候选消除算法(Candidate Elimination Algorithm) **定义与应用:** - **背景介绍:** 候选消除算法是一种用于构建概念学习系统的算法,适用于...
本文档旨在帮助读者深入理解Python编程语言中与脚本开发密切相关的几个核心概念和技术。通过学习这些知识点,可以提升开发者在实际项目中的编码效率及代码质量。 ##### 前提条件 为了更好地理解和吸收本文档内容,...
在提供的压缩包文件中,我们可以看到以下几个关键组成部分: 1. `configure.ac`:这是GNU Autoconf的配置脚本,用于自动生成Makefile,以适应不同的操作系统和编译环境。 2. `README`:通常包含项目的基本信息、...
- **反例**:对此规则或建议给出的错误示例。 此外,规范中并没有给出具体的缩略语定义,但在实际开发过程中可能会遇到一些常用的缩略语,例如: - **API**:Application Programming Interface(应用程序编程接口...
- 反例:`t_id`,其中“t”可能代表“topic”或“teacher”,没有具体的上下文很难确定其准确含义。 3. **限制单词数量**:变量名或类名中最多包含三个单词,如果超出这个限制,则意味着它可能承担了过多的职责,...
在Matlab中实现ROC曲线,首先我们需要理解以下几个关键概念: 1. **真阳性率(TPR)**:也称为灵敏度或召回率,是指真正例占所有实际正例的比例。计算公式为:TPR = TP / (TP + FN),其中TP表示真正例,FN表示假反例...