import java.util.*;
import java.lang.*;
public class Test{
public static void main(String[] argv){
String s1="abc";
String s2=(String) s1.clone();
}
}
なぜこの簡単なテストプログラムは機能しませんか?クローン()in java
import java.util.*;
import java.lang.*;
public class Test{
public static void main(String[] argv){
String s1="abc";
String s2=(String) s1.clone();
}
}
なぜこの簡単なテストプログラムは機能しませんか?クローン()in java
clone
は、Objectクラスのメソッドです。クラスが「複製可能」になるには、マーカCloneable
のインタフェースを実装する必要があります。 String
クラスはこのインタフェースを実装していないため、クローンメソッドをオーバーライドしないため、エラーになります。あなたがいることを、指定されたJavaの文字列にclone
を呼び出す必要が感じることはありませんので、私は上記のスニペットは教育目的のためであると思います
:Javaで
new String(String)
が既に存在し、clone()
呼び出しとほぼ同等です。有効なJavaアイテム11:慎重にクローンをオーバーライドします。 (または、さらに良いのは、クローン以外のコピーコンストラクタなどを使用してください。) –
この投稿は下向きです。 –
コンパイルされません。 'clone'は' Cloneable'のパブリックメソッドではないので、それを実装することは重要ではありません。 –
Object.clone()
は保護されている。これは使いやすいAPIです。
通常、メソッドの可視性を広げることによってオブジェクトを拡張するときに、clone()
が公開されます。
いずれの文字列のクローンも、final
との両方が不変のであるため、意味がありません。
文字列をコピーする理由があります。
文字列をコピーする必要はまれで、その理由を説明していません([この質問](http://stackoverflow.com/questions/390703/what-is-the-purpose-of-the-expression -new-string-in-java)を実行します)。 –
明らかにコンパイルできませんでした。 Object.clone
にはアクセス権が保護されています。
超えとして...、保護部材はまた、であるオブジェクト参照を介し クラスからアクセス可能な少なくとも同じタイプクラス自体の中にアクセス可能と 同じパッケージ内に符号化します クラス
java.lang.Cloneable インタフェースがそのオブジェクトのクローン私たちが作成するクラスによって実装されなければなりません。 が Cloneableインターフェイスを実装していない場合、clone()メソッドはCloneNotSupportedExceptionを生成します。
clone()メソッドは、Objectクラスで定義されています。 clone()メソッドの構文は次のとおりです。
protected Object clone() throws CloneNotSupportedException
クラスを「複製可能」にするには、マーカーCloneableインターフェイスを実装する必要があります。 Stringクラスはこのインタフェースを実装していないため、エラーが発生したクローンメソッドをオーバーライドしません。
プロテクトオブジェクトclone()throw CloneNotSupportedExceptionは、このオブジェクトの正確なコピー(クローン)を作成して返します。
Javaの文字列は不変です。メソッド/クラス間で自由に共有してください コピーコンストラクタのように動作するコンストラクタnew String(String)がすでに存在し、これはclone()呼び出しとほぼ同等です。
通常、メソッドの可視性を広げてオブジェクトを拡張するときにclone()を公開します。
すべての文字列のクローンは、最終的で不変なので意味がありません。
どのように動作しませんか? – Jivings
スレッド "main"の例外java.lang.RuntimeException:コンパイル不能なソースコード - 未報告の例外java.lang.CloneNotSupportedException;キャッチまたは宣言されている必要があります \t test.Test.main(Test.java:9) Javaの結果:1 – user1192813