来自Object类型的方法clone()不可见 - 给出的答案让我迷惑

时间:2016-03-19 17:04:36

标签: java 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();
            }

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

1 个答案:

答案 0 :(得分:1)

Object.clone()是在Java 1.0中添加的,就像一些最早的决定一样,它们今天可能会有所不同。

对象不应该有一个名为clone IMHO的受保护的方法,但是Cloneable应该有这样的公共方法。今天,可以使用默认方法将实用程序类克隆到对象,但那时候不是一个选项。

当前实现的缺点是所有Object都保护了clone(),甚至是那些不支持它的。对于String,就像所有不可变类一样,克隆对象没有意义,因此它不公开,但实际上,理想情况下,它根本不应该存在。