可以参考如下代码实现对类中的静态字段进行值修改,包括final修饰符的字段:
package java.lang;
import java.lang.reflect.Field;
public class ClassHelpers {
private static Field findFieldRecursiveImpl(Class<?> clazz, String fieldName) throws NoSuchFieldException {
try {
return clazz.getDeclaredField(fieldName);
} catch (NoSuchFieldException e) {
while (true) {
clazz = clazz.getSuperclass();
if (clazz == null || clazz.equals(Object.class))
break;
try {
return clazz.getDeclaredField(fieldName);
} catch (NoSuchFieldException ignored) {
}
}
throw e;
}
}
public static void setStaticObjectField(Class<?> clazz, String fieldName, Object value) {
try {
Field field = findFieldRecursiveImpl(clazz, fieldName);
field.setAccessible(true);
field.set(null, value);
} catch (NoSuchFieldException e) {
e.printStackTrace();
}catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
}
public static void setStaticIntField(Class<?> clazz, String fieldName, int value) {
try {
Field field = findFieldRecursiveImpl(clazz, fieldName);
field.setAccessible(true);
field.set(null, value);
} catch (NoSuchFieldException e) {
e.printStackTrace();
}catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
}
public static void setStaticLongField(Class<?> clazz, String fieldName, long value) {
try {
Field field = findFieldRecursiveImpl(clazz, fieldName);
field.setAccessible(true);
field.set(null, value);
} catch (NoSuchFieldException e) {
e.printStackTrace();
}catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
}
public static void setStaticShortField(Class<?> clazz, String fieldName, short value) {
try {
Field field = findFieldRecursiveImpl(clazz, fieldName);
field.setAccessible(true);
field.set(null, value);
} catch (NoSuchFieldException e) {
e.printStackTrace();
}catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
}
}