java 通过反射获取属性集合
时间: 2023-05-22 20:01:49 浏览: 216
可以使用 Class 类的 getDeclaredFields() 方法获取属性集合。例如:
```
Class<?> clazz = obj.getClass();
Field[] fields = clazz.getDeclaredFields();
```
其中,obj 是一个 Java 对象。getDeclaredFields() 方法返回一个 Field 数组,每个 Field 对象代表一个属性。可以通过 Field 对象的 getName() 方法获取属性名,getType() 方法获取属性类型。
相关问题
java 反射 获取集合属性的添加删除方法
可以通过反射获取到集合属性的添加和删除方法,具体步骤如下:
1. 获取集合属性对应的 Field 对象。
```
Field field = obj.getClass().getDeclaredField("fieldName");
```
其中,obj 为包含该属性的对象实例,fieldName 为属性名称。
2. 获取集合属性对应的类型。
```
Type type = field.getGenericType();
```
3. 判断属性类型是否为集合类型。
```
if (type instanceof ParameterizedType) {
ParameterizedType paramType = (ParameterizedType) type;
Class<?> clazz = (Class<?>) paramType.getActualTypeArguments()[0];
if (Collection.class.isAssignableFrom(clazz)) {
// 集合属性
}
}
```
4. 如果属性为集合类型,获取添加和删除方法。
```
if (Collection.class.isAssignableFrom(clazz)) {
Method addMethod = clazz.getMethod("add", Object.class);
Method removeMethod = clazz.getMethod("remove", Object.class);
}
```
其中,clazz 为集合类型。
至此,你就可以通过反射获取到集合属性的添加和删除方法了。
java通过反射将对象集合赋值给某个类的集合属性
假设你有一个类`MyClass`,其中有一个类型为`List<MyObject>`的属性`myList`,你可以使用反射将一个对象集合赋值给该属性,具体步骤如下:
1. 获取`MyClass`类的`myList`属性对象。
```java
Field field = MyClass.class.getDeclaredField("myList");
```
2. 将`myList`属性的访问权限设置为可修改。
```java
field.setAccessible(true);
```
3. 创建一个对象集合,并向其中添加`MyObject`对象。
```java
List<MyObject> list = new ArrayList<>();
list.add(new MyObject("Object 1"));
list.add(new MyObject("Object 2"));
```
4. 将对象集合赋值给`myList`属性。
```java
MyClass obj = new MyClass();
field.set(obj, list);
```
完整代码如下:
```java
// 获取MyClass类的myList属性对象
Field field = MyClass.class.getDeclaredField("myList");
// 将myList属性的访问权限设置为可修改
field.setAccessible(true);
// 创建一个对象集合,并向其中添加MyObject对象
List<MyObject> list = new ArrayList<>();
list.add(new MyObject("Object 1"));
list.add(new MyObject("Object 2"));
// 将对象集合赋值给myList属性
MyClass obj = new MyClass();
field.set(obj, list);
```
需要注意的是,如果你希望通过该属性修改原始对象集合,你需要使用相同的对象集合对象进行赋值操作,例如:
```java
List<MyObject> list = new ArrayList<>();
list.add(new MyObject("Object 1"));
list.add(new MyObject("Object 2"));
MyClass obj = new MyClass();
field.set(obj, list);
// 修改原始对象集合
list.add(new MyObject("Object 3"));
System.out.println(obj.myList); // 输出 [Object 1, Object 2, Object 3]
```
相关推荐
![](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)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)