0

Javaのオブジェクトがクローンをサポートしているかどうかを知る方法は? またはC'torのコピーがありますか?実行時に

例を挙げてください、ありがとう

4

2 に答える 2

1

クローンチェックをサポートしているかどうかを確認するには

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例外をスローします。

于 2012-05-26T14:02:47.937 に答える
-1

サポートするすべてのオブジェクトcloneは、 も実装することになっていますCloneable

于 2012-05-26T13:57:49.667 に答える