2016-11-30 4 views
0

私は "Car"というクラスモデルを持っています。 私は「車」の新しいオブジェクトを作成したい場合は、私はこのような何かを行うことができます。新しいパーセル化可能オブジェクトを作成する適切な方法

Car car = new Car(); 

をしかし、今、私はこのクラスを作っParcelableを実装しています。クラス "車"の新しいオブジェクトを作成する最良の方法は何ですか?私はないよParcelable私は、このクラスに新しいですので

public class Car implements Parcelable { 

    public String color; 

    @Override 
    public int describeContents() { return 0; } 

    @Override 
    public void writeToParcel(Parcel dest, int flags) { dest.writeString(color); } 

    public static final Creator<Car> CREATOR = new Creator<Car>() { 
     public Car createFromParcel(Parcel in) { return new Car(in); } 
     public Car[] newArray(int size) { return new Car[size]; } 
    }; 

    private Car(Parcel in) { color = in.readString(); } 

    public Car(String myColor) { color = myColor; } 
} 

を:

今私はこの方法でやっている:

Car car = new Car("blue"); 

をそして私は私のモデルクラスに新しいコンストラクタを追加していますこれが最高のものかどうか確かめてください。私のクラスに2つのコンストラクタがあっても何か悪いですか?これを行うための他のより効率的な方法はありますか?

この2番目のコンストラクタを追加すると、このクラスの新しいオブジェクトを作成する際にパフォーマンスが低下することがありますか?

+0

まずクリーンコードを作成してください。次に、最適化します。それは私にとってはうまくいくようです。 – tynn

+0

それは 'Parcelable'を作成する適切な方法でしょう。目立ったパフォーマンスの低下はありません。クラスの設計では、複数のコンストラクタが共通しています。 – DeeV

+0

一部のフレームワークでは、空の場合でもデフォルトのコンストラクタを保持する必要があります –

答えて

1

私はこのクラスを初めて使っているので、私はこれが最良の方法であるかどうか分かりません。私のクラスに2つのコンストラクタがあっても何か悪いですか?これを行うための他のより効率的な方法はありますか?

これは必要なものによって異なりますが、パーセル可能なパターンの実装はおかしいと思われます。

あなたのオブジェクトをインテントまたは引数バンドルに効率的に渡す必要がある場合は、最良の方法です。 Parcelableは、クラスのシリアライゼーションのより効率的なアンドロイドの実装です。

シリアライザを使用することができますが、最適ではありませんがシンプルであれば、これはデフォルトのjava approchです。少し遅く、独自の欠点があります^^。

そして、あなたのためのより重要なのは生成された状態の可読性(parcelableと、シリアライズがあなたのオブジェクトからバイトストリームを行います)であれば、あなたはJSONのconvertionを使用する場合があります(そのために私はgsonをお勧めします。

私はこの第二のコンストラクタを追加することは、私のアプリケーションは、このクラスの新しいオブジェクトを作成するにはいくつかのパフォーマンスを失うべきであると怖いです。

複数のコンストラクタと間違って何もありません。彼らは、単にあなたのオブジェクトの状態を初期化する方法です。何ももっと何もない。

PS:仕事に車を作成する古い方法の場合:

public Car() { } 

乾杯:

Car car = new Car(); 

は、単に空のコンストラクタを追加します。

関連する問題