gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 13:41:11 25 4
gpt4 key购买 nike

就我而言,我可以用它来操作给定 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com