首页 > 解决方案 > 将元素类型对象转换为映射条目时出错

问题描述

当我想从对象转换为 map.entry 时遇到问题。当我想尝试时,这里有任何问题。我尝试修复它,这里没有建议。为什么这样?

这是我的源代码

private static HashMap getCommonEnvironment(final List blacklist) {
        final String[] entries = { "PATH", "PATH", "LD_LIBRARY_PATH", "LD_ASSUME_KERNEL", "USER", "TMP", "TEMP", "HOME", "HOMEPATH", "LANG", "TZ", "OS" };
        final HashMap defaultEnv = new HashMap();
        Method m = null;
        try {
            m = System.class.getMethod("getenv", String.class);
        }
        catch (Exception ex) {}
        for (int i = 0; i < entries.length; ++i) {
            String val = null;
            if (m != null) {
                try {
                    val = (String)m.invoke(System.class, entries[i]);
                }
                catch (Exception e2) {
                    m = null;
                }
            }
            if (val == null) {
                try {
                    val = System.getProperty(entries[i]);
                }
                catch (Exception ex2) {}
            }
            if (val != null && !blacklist.contains(entries[i])) {
                defaultEnv.put(entries[i], val);
            }
        }
        String key;
        String val = key = null;
        if (new File("c:/winnt").isDirectory()) {
            val = "c:\\winnt";
        }
        else if (new File("c:/windows").isDirectory()) {
            val = "c:\\windows";
        }
        try {
            final String s = System.getenv(key = "SystemRoot");
            if (s != null) {
                val = s;
            }
        }
        catch (Throwable t) {}
        try {
            final String s = System.getProperty(key = "Windows.SystemRoot");
            if (s != null) {
                val = s;
            }
        }
        catch (Throwable t2) {}
        if (val != null && !blacklist.contains(key)) {
            defaultEnv.put("SystemRoot", val);
        }
        try {
            m = System.class.getMethod("getenv", (Class<?>[])Util.ZERO_PARAM);
            final Map map = (Map)m.invoke(System.class, Util.ZERO_ARG);
            for (final Map.Entry entry : map.entrySet()) {
                key = (String) entry.getKey();
                val = (String) entry.getValue();
                if (!blacklist.contains(key)) {
                    defaultEnv.put(key, val);
                }
            }
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        return defaultEnv;
    }

我的错误符合我的想法,无法从对象转换为 map.entry

 for (final Map.Entry entry : map.entrySet()) {
                key = (String) entry.getKey();
                val = (String) entry.getValue();
                if (!blacklist.contains(key)) {
                    defaultEnv.put(key, val);
                }

我的问题是这段代码有什么问题?

标签: javahashmap

解决方案


 final Map<String,String> map = m.invoke(System.class, Util.ZERO_ARG);
        for (final Map.Entry<String,String> entry : map.entrySet()) {
            key =  entry.getKey();
            val =  entry.getValue();
            if (!blacklist.contains(key)) {
                defaultEnv.put(key, val);
            }
        }

您可以添加具体类型。


推荐阅读