代码小例子:
package com.test;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class ReflectTest
{
// object's copy
public static Object copy(Object obj) throws Exception, Exception
{
Class<? extends Object> clazz = obj.getClass();
// Constructor con = clazz.getConstructor(new
// Class[]{int.class,String.class});
Constructor con = clazz.getConstructor();
// Object o = con.newInstance(new Object[]{1,"2"});
Object o = con.newInstance(new Object[] {});
Field[] field = clazz.getDeclaredFields();
for (Field field2 : field)
{
String name = field2.getName();
String firstLetter = name.substring(0, 1).toUpperCase();
String getMethodName = "get" + firstLetter + name.substring(1);
String setMethodName = "set" + firstLetter + name.substring(1);
Method getMethod = clazz.getMethod(getMethodName, new Class[] {});
Method setMethod = clazz.getMethod(setMethodName,
new Class[] { field2.getType() });
Object value = getMethod.invoke(obj, new Object[] {});
setMethod.invoke(o, new Object[] { value });
// System.out.println(field2);
System.out.println(getMethodName);
System.out.println(setMethodName);
}
// System.out.println(o);
return o;
}
public static void main(String[] args) throws Exception
{
People p = new People();
p.setAge(1);
p.setName("liu");
p.setHight("66kg");
People p2 = (People) ReflectTest.copy(p);
System.out.println(p2.getAge());
System.out.println(p2.getHight());
System.out.println(p2.getName());
}
}
class People
{
private int age;
private String name;
private String hight;
public People()
{
}
public People(int age, String name)
{
this.age = age;
this.name = name;
}
public int getAge()
{
return age;
}
public void setAge(int age)
{
this.age = age;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public String getHight()
{
return hight;
}
public void setHight(String hight)
{
this.hight = hight;
}
}
分享到:
相关推荐
在深入探讨Java反射机制中`Constructor`、`Method`、`Field`以及`Class`类的使用之前,我们需要先了解反射的基本概念及其重要性。反射是Java的一项强大功能,它允许程序在运行时检查类和对象的结构,甚至可以创建和...
JavaSE062Class类、Method类及Field类的使用方式深度探析 JavaSE062Class类、Method类及Field类是Java中三个非常重要的类,它们都是Java反射机制的核心组件。在Java中,反射机制是指可以在运行时检查和修改类、方法...
在 Java 反射机制中,我们可以通过 Class 对象来获取类的信息,通过 Field 对象来获取类的成员变量,通过 Method 对象来获取类的方法。 例如,要获取某个对象的属性,我们可以使用以下代码: ```java public ...
但是,需要注意的是,过度使用反射可能会导致性能下降和安全性问题,因此在使用反射时需要谨慎考虑。 总之,理解Java反射机制对于开发复杂的应用程序至关重要,尤其是在需要处理动态类型或元数据的情况下。
例如,`java.lang.Class`类提供了获取类信息的方法,`java.lang.reflect.Field`用于访问字段,`java.lang.reflect.Method`用于调用方法,而`java.lang.reflect.Constructor`则用于操作构造器。 获取类的三种方式:...
通过使用 Class、Method、Field 等类,可以实现许多复杂的功能。 在实际开发中,Java 反射机制广泛应用于框架、库、工具等领域。例如,Spring 框架使用 Java 反射机制来实现依赖注入、AOP 等功能。 Hibernate 框架...
在Java中,反射机制的核心类是`java.lang.Class`,它代表了类的信息。通过反射,我们可以动态地创建对象、调用方法、访问字段,甚至在运行时发现和修改类的行为。以下是对Java反射使用及相关知识点的详细阐述: 1. ...
在JAVA反射机制中,Class类和Field类、Method类、Constructor类是最重要的三个类,它们提供了访问类、字段、方法和构造函数的能力。 在获取某个对象的属性时,我们可以使用getField方法,例如: ```java public ...
Method method = ownerClass.getMethod(methodName, argsClass):通过Method名和参数的Class数组得到要执行的Method。 method.invoke(owner, args):执行该Method,invoke方法的参数是执行这个方法的对象,和参数...
3. 谨慎使用反射,避免过度使用导致代码难以理解和维护。 总结,Java反射是Java语言中的强大工具,虽然带来了一些便利和灵活性,但也需要注意其潜在的风险和性能影响。在实际开发中,应根据具体需求权衡是否使用...
这一机制的核心在于Java.lang.reflect包中的三个关键类:Class、Method和Field,它们分别代表类的信息、方法和字段。 1. Class类:在Java中,每一个类都有一个对应的Class对象,它包含了该类的所有信息,如类名、包...
- `Method getDeclaredMethod(String name, Class<?>... parameterTypes)`: 获取具有指定名称和参数类型的方法,包括私有。 5. 动态调用对象的方法: - `Method method = obj.getClass().getMethod("methodName",...
首先,要使用反射API,我们需要导入`java.lang.reflect`包中的几个关键类:`Class`、`Constructor`、`Method`和`Field`。这些类分别代表类对象、构造器对象、方法对象和字段对象。 1. **获取类对象**: 要使用反射...
Java中的Field类和Method类是Java反射机制的重要组成部分,它们提供了对类的字段(属性)和方法的动态访问和操作能力。在Java编程中,反射允许我们在运行时检查类的信息,包括类的结构、方法、字段,甚至可以修改类...
例如,使用`Class.forName("类全名")`可以获取到对应的`Class`对象。 接下来是`Method`类,它代表类的方法。`Method`对象包含了方法的名称、返回类型、参数类型等信息。我们可以调用`Method`对象的`invoke()`方法来...
与上一段代码类似,这里使用`Class.forName`直接获取类,然后通过`getField`方法获取静态字段,并最终调用`field.get(ownerClass)`获取静态字段的值。 ##### 3. 调用对象的方法 ```java public Object ...
在Java中,反射机制主要通过java.lang.Class类、java.lang.reflect包中的类(如Constructor、Method、Field)来实现。本文将深入探讨Java反射的基本概念、用途、优缺点以及如何使用。 一、什么是Java反射 Java反射...
java反射的用例代码 // //获取类对象的属性 // Field field = clazz.getDeclaredField("name"); // System.out.println(field); // // Method method = clazz.getDeclaredMethod("getName", new Class[]{}); // ...
本资源将引导初学者了解如何使用反射和Class类进行类的获取和操作。 首先,让我们了解如何获取Class对象。在Java中,有三种主要方式来获取Class对象: 1. 使用`Class.forName(String className)`方法,传入完全限定...
- 使用反射操作时,要注意安全性和性能问题,因为反射会降低程序的运行效率,并可能破坏封装性,导致安全风险。 - 对于非公有的属性和方法,需调用`setAccessible(true)`来允许访问。 - 反射操作可能会抛出异常,...