我知道之前已经问过这个问题,但是每个人似乎都给出了相同的答案,就这样说:
public Object clone(){
try{
return super.clone();
}catch(Exception e){
return null;
}
}
进入类并将implements Cloneable
添加到类标签中,它应该可以工作。但它在我尝试的情况下不起作用。我的代码是:
while (it.hasNext())
{
Map.Entry pair = (Map.Entry)it.next();
for(int i = 0; i < listOfString[k].size(); i++)
{
String vals = listOfString[k].get(i);
if((vals).endsWith(pair.getValue().toString()))
{
temp = vals.substring(0,29);
Object tempCopy = "";
tempCopy= temp.clone();
temp1[j][i] = Integer.parseInt(tempCopy.toString(),2);
System.out.println(temp1[j][i]); // gives value if I use temp directly - without cloning
}
temp ="";
System.out.println(temp1[j][i]); //gives 0 if i use temp directly - without cloning
}
j++;
it.remove();
}
基本上,我有map
<String, Int>
个键值对和ArrayList
Strings
。这个问题的重要部分是我正在尝试将integer
值放入array
temp1中。由于Java通过引用传递,并且我不希望我的temp
字符串被重置,因此我使用了.clone()
方法。尽管做了人们所说的话,我仍然会在这个问题的标题中得到错误。另外,如果有人在我将temp1
重置为temp
时如何确保""
没有丢失值,那么我会很感激。
答案 0 :(得分:1)
Object.clone()是在Java 1.0中添加的,就像一些最早的决定一样,它们今天可能会有所不同。
对象不应该有一个名为clone IMHO的受保护的方法,但是Cloneable应该有这样的公共方法。今天,可以使用默认方法将实用程序类克隆到对象,但那时候不是一个选项。
当前实现的缺点是所有Object都保护了clone(),甚至是那些不支持它的。对于String,就像所有不可变类一样,克隆对象没有意义,因此它不公开,但实际上,理想情况下,它根本不应该存在。