Java 如何将HashMap类型转换为WeakHashMap?
我有这样一种方法:-Java 如何将HashMap类型转换为WeakHashMap?,java,Java,我有这样一种方法:- public Map<String,String> loadProperties() Exception{ Map <String,String> params = new HashMap<String,String>(); . . . return params; } 以下是服务级别:- private Service() throws Exception { configPropertiesCache = dao.
public Map<String,String> loadProperties() Exception{
Map <String,String> params = new HashMap<String,String>();
.
.
.
return params;
}
以下是服务级别:-
private Service() throws Exception {
configPropertiesCache = dao.loadProperties();
configPropertiesCache = (WeakHashMap<String, String>) dao.loadProperties();
private Service()引发异常{
ConfigPropertieCache=dao.loadProperties();
configPropertiesCache=(WeakHashMap)dao.loadProperties();
我很想知道它为什么不起作用?
HashMap
不是一个WeakHashMap
,所以你不能将一个强制转换为另一个。但是,你可以在loadProperties
方法中返回WeakHashMap
,或者手动将HashMap
转换为WeakHashMap
。它不起作用因为HashMap
根本不是WeakHashMap
。类型转换不会从一种类型转换为另一种类型
类型转换的唯一含义是告诉编译器,您希望它将一种类型的对象视为另一种类型的对象,但仍将在运行时进行检查,以检查您正在转换的对象是否真的是您将其转换为的对象,如果检查失败,您将得到一个ClassCastException
在loadProperties()
方法中将映射创建为WeakHashMap
,或者如果无法修改该方法,请将其复制到WeakHashMap
:
configPropertiesCache = new WeakHashMap<>(dao.loadProperties());
configPropertiesCache=newweakhashmap(dao.loadProperties());
HashMap和WeakHashMap是不同的映射实现,因此您不能将一个映射到另一个。通常,如果您的ClassA具有子类ClassB和ClassC,则您可以将ClassB或ClassC转换为ClassA,但不能将ClassB转换为ClassC,反之亦然
如果要将HashMap转换为WeakHashMap,则需要创建一个新的WeakHashMap,然后遍历HashMap并将其所有键值对添加到WeakHashMap中。按如下方式执行:
public WeakHashMap<String, String> getWeakHashMap(Map<String, String> map) {
if (map instanceof WeakHashMap) {
return (WeakHashMap<String,String>) map;
}
return new WeakHashMap<String,String>(map);
}
public WeakHashMap getWeakHashMap(地图地图){
if(WeakHashMap的映射实例){
返回(WeakHashMap)地图;
}
返回新的WeakHashMap(map);
}
类型转换不起作用,但您可以创建一个asWeakHashMap
方法,该方法获取一个映射并将所有条目添加到一个新的WeakHashMap
并返回该映射。您不能将映射
转换为WeakHashMap
,但您可以创建一个包含所有值的新的WeakHashMap
。您可以使用该代码执行此操作:
Map<String, String> otherMap = new HashMap()<String, String>;
map.put("Hello", "World");
WeakHashMap<String, String> weakMap = new WeakHashMap(otherMap);
System.out.println(weakMap.get("Hello"));
Map otherMap=newhashmap();
地图。放置(“你好”,“世界”);
WeakHashMap weakMap=新的WeakHashMap(其他地图);
System.out.println(weakMap.get(“Hello”);
类型转换!=对象的转换。
Map<String, String> otherMap = new HashMap()<String, String>;
map.put("Hello", "World");
WeakHashMap<String, String> weakMap = new WeakHashMap(otherMap);
System.out.println(weakMap.get("Hello"));