来自对象类型的 clone() 方法不可见 - 给出的答案让我感到困惑



我知道这个问题以前被问过,但每个人似乎都给出了相同的答案,把这个:

 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();
            }

基本上,我有一个包含<String, Int>键值对和Strings ArrayListmap。这个问题的重要部分是我试图将integer值放入我的 array temp1 中。由于 Java 通过引用传递并且我不希望重置我的temp字符串,因此我使用了 .clone() 方法。尽管按照人们所说的去做,但我仍然在这个问题的标题中得到错误。另外,如果有人对如何确保temp1在我将temp重置为""时不会丢失值有答案,我将不胜感激。

Object.clone() 是在 Java 1.0 中添加的,就像一些最早的决策一样,它们今天可能以不同的方式完成。

对象不应该有一个名为克隆恕我直言的受保护方法,但克隆应该有这样的公共方法。 今天,这可以使用实用程序类的默认方法来克隆对象来完成,但这在当时不是一个选项。

当前实现的缺点是所有对象都有受保护的clone(),即使是那些不支持它的对象。 在 String 的情况下,像所有不可变类一样,克隆对象是没有意义的,所以它不是公共的,但实际上,理想情况下,它根本不应该存在。

相关内容

最新更新