通过反射获取toolsName和toolsSize的Field对象。
时间: 2023-05-21 07:05:26 浏览: 54
可以通过以下代码获取toolsName和toolsSize的Field对象:
```
Field nameField = Tool.class.getDeclaredField("toolsName");
Field sizeField = Tool.class.getDeclaredField("toolsSize");
nameField.setAccessible(true);
sizeField.setAccessible(true);
```
其中,Tool是一个包含toolsName和toolsSize属性的类。使用getDeclaredField方法可以获取类中声明的属性,并通过setAccessible方法设置可访问性。
相关问题
java 通过反射获取对象的名称和值
可以通过以下步骤使用反射获取对象的名称和值:
1. 获取对象的 Class 对象:使用对象的 getClass() 方法获取该对象的 Class 对象。
2. 获取对象的所有字段:使用 Class 对象的 getDeclaredFields() 方法获取该对象的所有字段。
3. 遍历所有字段并获取字段名称和值:使用 Field 对象的 getName() 方法获取字段名称,使用 Field 对象的 get() 方法获取字段值。
下面是一个示例代码:
```java
public static void printObject(Object obj) throws Exception {
Class<?> clazz = obj.getClass();
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
String name = field.getName();
Object value = field.get(obj);
System.out.println(name + " = " + value);
}
}
```
请注意,需要处理可能抛出的异常,例如 IllegalAccessException。
如何通过反射获取和设置对象私有字段的值
通过反射可以获取和设置对象的私有字段的值,具体步骤如下:
1. 获取Class对象:使用Class.forName()方法获取类的Class对象。
2. 获取Field对象:使用Class.getDeclaredField()方法获取指定名称的Field对象,需要传入字段名称。
3. 设置可访问性:使用Field.setAccessible(true)方法设置Field对象可访问。
4. 获取或设置字段值:使用Field.get()方法获取字段值,使用Field.set()方法设置字段值,需要传入对象实例。
示例代码如下:
```
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
public class Main {
public static void main(String[] args) throws Exception {
Person person = new Person("Tom", 20);
// 获取Class对象
Class<?> clazz = person.getClass();
// 获取name字段
Field nameField = clazz.getDeclaredField("name");
// 设置可访问性
nameField.setAccessible(true);
// 获取name字段的值
String name = (String) nameField.get(person);
System.out.println("name: " + name);
// 设置name字段的值
nameField.set(person, "Jerry");
System.out.println("new name: " + person.getName());
}
}
```