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