2012-01-13 18 views
1

こんにちは私は列挙型の配列を持って、それは私のクラスのフィールドです。そして私はこのクラスのクローンメソッドを実装しています。しかし、私は列挙型の配列をコピーするためのいくつかのアイデアを持っていますが、列挙型配列をコピーする正式な方法は何ですか?コピーenum配列

public enum StateEnum { 
     START, PLAY, PAUSE , STOP 
    } 


class MyClass{ 
    StateEnum[] stateEnums; 

    public Object clone(){ 
     MyClass copyClass = new MyClass(); 
     // copy enums 
    } 
} 

答えて

4

列挙型の値がある(またはあるべき)不変なので、あなたはそれらをコピーする必要はありません。
System.arraycopy()を呼び出すだけで、配列の浅いコピーを作成できます。

+3

列挙型の値は不変ではありませんが、それぞれのインスタンスは1つだけです。浅いコピーはまだ正しいですが、不変であるというコメントを削除する必要があります。 –

+0

@ increment1:なぜ彼らは不変ではありませんか? – SLaks

+1

@SLaksそれらを変更可能な状態とメソッドに変更することができます。 'enum Foo {BAR; public int mutable; } ' – yshavit

1

SLAKsが述べたように、System.arraycopyを使用してアレイをクローンします。さらに、

MyClass copyClass = new MyClass(); 

clone

方法を実施しながら、この理由は、ページ2の端部は、共通の落とし穴を説明し、完全な詳細に this articleに説明され

MyClass copyClass = (MyClass)super.clone(); 

によって置換されなければなりません