System.getenv()可以获取系统的环境变量,这个环境变量不可以通过程序修改,但有些场景下,可能需要在程序启动时,手动注入部分环境变量(比如,本地测试?)。最近在看相关源码时,偶然翻到一种方式来实现这样的场景。
备注下实现方式:
private static Map<String, String> getFieldValue(Class<?> klass,
Object object, String name)
throws NoSuchFieldException, IllegalAccessException {
Field field = klass.getDeclaredField(name);
field.setAccessible(true);
return (Map<String, String>) field.get(object);
}
private static Map<String, String> getEditableMapOfVariables() {
Class<?> classOfMap = getenv().getClass();
try {
return getFieldValue(classOfMap, System.getenv(), "m");
} catch (IllegalAccessException e) {
throw new RuntimeException("System Rules cannot access the field"
+ " 'm' of the map System.getenv().", e);
} catch (NoS