Eclipse警告“Type safety:Unchecked cast”有递归解决方案

时间:2013-12-24 14:02:12

标签: java eclipse performance hashmap shallow-copy

在我的情况下,我有这个来操纵给定HashMap的浅拷贝

public class SomeClass
{
    private HashMap<String, String> hashMap;
    public SomeClass( private HashMap<String, String> hashMap )
    {
        this.hashMap = (HashMap<String, String>) hashMap.clone();
    }
}

然而,eclipse建议我提取到局部变量或方法或添加一个演员,当我这样做时,它一直在向我建议相同的解决方案:)

我来到this post并且从接受的答案中我发现它不太清楚

  

“你正在用新的HashMap创建调用浪费内存”

当我将其应用于我的代码时,我将

if(songData.clone() instanceof HashMap)
{
    this.songData = (HashMap<String, String>) songData.clone();
}

我发现cosume更多的过程是调用clone()两次。

有更好的方法吗?我的代码片段可能对资源有害吗?

1 个答案:

答案 0 :(得分:1)

不要使用克隆。 clone()是一种设计糟糕的方法,需要对被克隆的对象有太多的了解,并且用户通常也会错误地实现。 (有关此内容的详细信息,请参阅 Effective Java

复制地图的最佳方法是使用相同的数据创建新地图:

public SomeClass( HashMap<String, String> hashMap )
{
    this.hashMap = new HashMap<String,String>(hashMap);
}

同样作为FYI,public SomeClass( private HashMap<String, String> hashMap )无法编译。您不能拥有private关键字的参数。从参数中删除“私有”。

你在使用新的HashMap调用浪费内存

这是您引用的其他帖子的答案,因为他们的代码是:

private Map<String, String> someMap = new HashMap<String, String>();
someMap = (HashMap<String, String>)...

通过调用someMap创建new Hashmap(),但该引用立即被替换为不同的HashMap。

这与你的问题无关,所以你可以忽略它。