无法实例化类型Set

Joh*_*ate 21 java hashtable set

我正在尝试创建一个字符串集,其中填充了来自Hashtable的键,因此for-each循环可以遍历Set并将默认值放在Hashtable中.我仍然在学习Java,但我尝试这样做的方式并不是有效的语法.有人可以证明这样做的正确方法,并解释为什么我的方式不起作用,他们的方式.

private Hashtable<String, String> defaultConfig() {
    Hashtable<String, String> tbl = new Hashtable<String, String>();
    tbl.put("nginx-servers","/etc/nginx/servers");
    tbl.put("fpm-servers","/etc/fpm/");
    tbl.put("fpm-portavail","9001");
    tbl.put("webalizer-script","/usr/local/bin/webalizer.sh");
    tbl.put("sys-useradd","/sbin/useradd");
    tbl.put("sys-nginx","/usr/sbin/nginx");
    tbl.put("sys-fpmrc","/etc/rc.d/php_fpm");
    tbl.put("www-sites","/var/www/sites/");
    tbl.put("www-group","www"); 
    return tbl;
}

//This sets missing configuration options to their defaults.
private void fixMissing(Hashtable<String, String> tbl) {
    Hashtable<String, String> defaults = new Hashtable<String, String>(defaultConfig());
    //The part in error is below...
    Set<String> keys = new Set<String>(defaults.keySet());

    for (String k : keys) {
        if (!tbl.containsKey(k)) {
            tbl.put(k, defaults.get(k));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Seg*_*ult 58

Set 不是一个类,它是一个接口.

所以基本上你只能实例化类实现Set(HashSet,LinkedHashSetTreeSet)

例如 :

Set<String> mySet = new HashSet<String>();
Run Code Online (Sandbox Code Playgroud)

  • 啊,我犯了一个新手的错误. (2认同)