java - Eclipse警告 "Type safety: Unchecked cast"已得到递归解决方案

标签 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从接受的答案来看,我发现它不是很清楚

"you're wasting memory with the new HashMap creation call"

当我将其应用到我的代码中时,我将拥有

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

我发现调用 clone() 两次会消耗更多的过程。

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

最佳答案

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

复制 map 的最佳方法是创建具有相同数据的新 map :

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

仅供引用,public SomeClass( private HashMap<String, String> hashMap )不编译。您不能使用 private 的参数关键词。从参数中删除“private”是有效的。

新的 HashMap 调用浪费了内存

这是您引用的另一篇文章的答案,因为他们的代码是:

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

哪里someMap是通过调用 new Hashmap() 创建的但随后该引用立即被不同的 HashMap 替换。

这与您的问题无关,因此您可以忽略它。

关于java - Eclipse警告 "Type safety: Unchecked cast"已得到递归解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20762283/

相关文章:

java - 更改 JFrame 标题

java - 如何在 Eclipse 中为 XML 文件设置 "tabs only"-policy?

javascript - 在 JavaScript 中,装箱对象上的每个数字和字符串的性能成本是多少?

c# - 在 C# 中比较两个有序列表

java - 无法理解这个输出

android - 在 android eclipse 项目中使用新的 firebase sdk

java - 如何在 java 中解析 XML 表达式

android - 性能不佳的 Lint 警告 - 80+ 次查看

java - Intellij 不询问是否在同一窗口或不同窗口中打开项目

java - 在 Java 中将 double 除以零