为什么这个程序抛出java.lang.UnsupportedOperationException

时间:2017-08-17 11:32:48

标签: java

import java.util.Map;

class Test {
    public static void main(String[] args) {
        Map<String, String> env = System.getenv();
        System.out.println(env);
        env.put("ID", "1");
    }
}

我在初始化时添加一些键值对,然后再添加一个键值对,这样程序有什么问题?

2 个答案:

答案 0 :(得分:3)

不,你不能修改返回的地图。

System#getEnv()返回不可修改的地图

  

返回当前系统环境的不可修改的字符串映射视图。

原因是地图包含有关正在运行的系统的信息,您不能简单地以编程方式添加信息。

答案 1 :(得分:0)

  

我在初始化时在地图中添加了一些键值对

不,你不是。您正在初始化地图引用变量env,以引用通过调用System.getEnv()返回的预先存在的地图。

  

然后再添加一个键值对,这样程序有什么问题?

如上所述,您是第一次尝试添加键值对。 Map的Javadoc。它说put方法是一个可选操作。事实上,getEnv()返回的地图类型并不支持put()

你到底想要做什么?如果要更改子进程的环境,请使用ProcessBuilder类,该类允许您指定其他环境变量。如果您尝试更改当前流程的环境,则只需创建自己的私有地图,将getEnv()中的所有条目复制到其中,然后在您需要的任何地方使用您自己的地图而不是getEnv()