Javaのオブジェクトがクローンをサポートしているかどうかを知る方法は? またはC'torのコピーがありますか?実行時に
例を挙げてください、ありがとう
Javaのオブジェクトがクローンをサポートしているかどうかを知る方法は? またはC'torのコピーがありますか?実行時に
例を挙げてください、ありがとう
クローンチェックをサポートしているかどうかを確認するには
if(myObject instanceof Cloneable) {
}
上記は、オブジェクトが Cloneable を実装しており、デフォルトのクローンがサポートされているかどうかを示しています。
ただし、クラスが clone メソッドをサポートしていなくても、インスタンスのコピーを作成する API を提供する場合があります。そのようなメソッドについては、API ドキュメントまたはソース コードを確認する必要があります。
更新: instanceof チェックがクローンの成功を保証しない理由:
if(myObject instanceof Cloneable) {
Object obj = myObject.clone();
}
1-> 以下のコード スニペットを検討してください
public class IImplementCloneableButThrowException implements Cloneable{
//Javadoc has a separate section for Exception, implementation like
//this and should clearly specify the condition in which
//CloneNotSupportedException will be thrown.
public Object clone() throws CloneNotSupportedException {
//I implement but still wont clone, may be in future will allow myself to be cloned
throw new CloneNotSupportedException("Sorry I cannot be cloned!");
}
}
2-> 以下の 2 番目のケースを検討してください
public class IImplementCloneableButCloneIsHidden implements Cloneable{
//Ouch either no clone method or one which is Object class but that
//has protected access modifier, which means I cannot call unless
//I extend it, too bad
}
そのため、instanceof
チェックは正しく通過しますが、呼び出すclone
ことができないか、clone
例外をスローします。
サポートするすべてのオブジェクトclone
は、 も実装することになっていますCloneable
。