用Java写一个反射工具类
时间: 2024-05-14 14:19:27 浏览: 23
反射是 Java 中一个非常重要的特性,它可以帮助我们在程序运行时动态地获取类的信息,并且可以操作类的属性、方法和构造函数等。下面是一个简单的反射工具类:
```java
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class ReflectUtil {
// 获取类的构造函数
public static Constructor<?> getConstructor(Class<?> clazz, Class<?>... parameterTypes) throws NoSuchMethodException {
return clazz.getConstructor(parameterTypes);
}
// 获取类的属性
public static Field getField(Class<?> clazz, String fieldName) throws NoSuchFieldException {
return clazz.getDeclaredField(fieldName);
}
// 获取类的方法
public static Method getMethod(Class<?> clazz, String methodName, Class<?>... parameterTypes) throws NoSuchMethodException {
return clazz.getDeclaredMethod(methodName, parameterTypes);
}
// 创建对象
public static Object newInstance(Class<?> clazz) throws IllegalAccessException, InstantiationException {
return clazz.newInstance();
}
// 调用方法
public static Object invokeMethod(Method method, Object obj, Object... args) throws Exception {
return method.invoke(obj, args);
}
// 设置属性值
public static void setFieldValue(Field field, Object obj, Object value) throws IllegalAccessException {
field.setAccessible(true);
field.set(obj, value);
}
// 获取属性值
public static Object getFieldValue(Field field, Object obj) throws IllegalAccessException {
field.setAccessible(true);
return field.get(obj);
}
}
```
这个工具类提供了以下几个方法:
- `getConstructor`:获取类的构造函数;
- `getField`:获取类的属性;
- `getMethod`:获取类的方法;
- `newInstance`:创建类的实例;
- `invokeMethod`:调用类的方法;
- `setFieldValue`:设置类的属性值;
- `getFieldValue`:获取类的属性值。
这些方法可以帮助我们在程序运行时动态地获取和操作类的信息,非常方便。
相关推荐
![java](https://img-home.csdnimg.cn/images/20210720083646.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)