java - 无法实例化类型 Set

标签 java set hashtable

我正在尝试创建一组字符串,其中填充了来自 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));
        }
    }
}

最佳答案

Set 不是一个类,它是一个接口(interface)。

所以基本上你只能实例化实现 Set 的类(HashSetLinkedHashSetTreeSet)

例如:

Set<String> mySet = new HashSet<String>();

关于java - 无法实例化类型 Set,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18946657/

相关文章:

java - 列表<?> 或列表<对象>

java - IntelliJ 中自定义逗号优先格式的设置

Java Collections - 查找两个集合之间是否存在公共(public)元素的最快方法

android - 在 SQLite 中高效地存储和查询整数数组

c# - .Net Hashtable、Java Hashtable 和 HashMap 的区别

c++ - HashMap 直接访问运算符 []

c - 为什么我的程序显然没有读取所有输入数字,我如何检测非数字输入?

java - 动态识别实体类和JPA接口(interface)

java - 在这个 JavaFX 示例代码中,Stage 是如何实例化的?

java - 如何检测一个 Set of Sets 是否包含另一个 Set?