Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将HashMap类型转换为WeakHashMap?_Java - Fatal编程技术网

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"));