java无法实例化类型集
我正在尝试创建一组字符串,这些字符串由哈希表中的键填充,这样for-each循环就可以遍历该字符串集,并将默认值放入哈希表中。我仍在学习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));
}
}
}
# 1 楼答案
HashMap的
keySet()
方法已经创建了所需的集合,因此简单地说:这是默认值中键的视图,因此当对基础(
defaults
)映射进行更改时,其内容将发生更改。对keys
所做的更改也将反映在地图中,但您只能删除。。。不添加。。。地图上的钥匙如果需要与原始地图不交互的密钥副本,请使用建议的类型之一,如中所示:
# 2 楼答案
Set是一个接口。不能实例化接口,只能实例化实现该接口的类
接口指定了行为,并且该行为可以通过不同的类型以不同的方式实现。如果你这样想的话,实例化一个接口是没有意义的,因为它指定了一件事情必须做什么,而不是它如何做
# 3 楼答案
Set
不是一个类,它是一个接口因此,基本上您只能实例化实现
Set
(HashSet
,LinkedHashSet
或TreeSet
)的类例如: