Java FAQ:オブジェクトのコピー
Java FAQ:S027 Q-02
public class C2008062900 { public static void main(String[] args) { Object o1 = new Object(); Object o2 = o1.clone(); System.out.println(o1); System.out.println(o2); } }
で、
C2008062900.java:5: clone() は java.lang.Object で protected アクセスされます。 Object o2 = o1.clone(); ^ エラー 1 個
String なら?
public class C2008062901 { public static void main(String[] args) { String s1 = "foo"; String s2 = s1.clone(); System.out.println(s1); System.out.println(s2); } }
で、
C2008062901.java:5: clone() は java.lang.Object で protected アクセスされます。 String s2 = s1.clone(); ^ C2008062901.java:5: 互換性のない型 出現: java.lang.Object 要求: java.lang.String String s2 = s1.clone(); ^ エラー 2 個
class C2008062903 implements Cloneable { public C2008062903 dup() { try { return (C2008062903)this.clone(); } catch (CloneNotSupportedException e) { return null; } } } public class C2008062902 { public static void main(String[] args) { C2008062903 o1 = new C2008062903(); C2008062903 o2 = o1.dup(); System.out.println(o1); System.out.println(o2); System.out.println(o1 == o2); } }
で、
C2008062903@82f0db C2008062903@f6a746 false
import java.util.*; public class C2008062904 { public static void main(String[] args) { LinkedList o1 = new LinkedList(); LinkedList o2 = (LinkedList)o1.clone(); System.out.println(o1); System.out.println(o2); System.out.println(o1 == o2); } }
で、
[] [] false
なんで、キャストが必要なん(Object が返ってくるん)だろう?