2017-09-02 4 views
0

私はアプリをSwiftからAndroidに変換しています。私はこのようないくつかのデータを保存するために静的クラスを使用しました。この場合Javaで静的モデルを作成する方法は?

class Model { 
    static let sharedModel = Model() 
    var email = "" 
    var password = "" 

    struct receipts {   
     var image = UIImage() 
     var currentDate = "" 
    } 

    var allreceipts = [receipts]() 

、私はデータにアクセスしたり、追加する必要がある場合、私はちょうど

Model.sharedModel.allreceipts.add(Image,"12/2/2017") 
Model.sharedModel.allreceipts[1] 

を呼び出すことができますどのように私はJavaで、かなり重複してクラスを作成することができますか?

これは私が私ができるように私はどこでもアクセスそれから、このクラスを呼び出すことができますどこスウィフトにJavaで同じことを行うことができますどのように

public class Model { 
    static Model sharedModel = new Model(); 

    class Receipts { 
    private Bitmap image; 
    private String currentDate = ""; 
    } 

    Receipts[] allreceipts; 
    } 

のJava

で試してみました何ですか?ほぼ同じ問題で

+0

私はあなたがOracle Javaチュートリアルを読んで時間を費やす必要があると思います。 Javaコードにはいくつかの基本的な問題があります。 –

+0

あなたが受け入れた解決策は、基本的には先に挙げたすべてのことをやっていることに気づいたことを願っています。私の答えに何かを加えて、あなたの目の中で少なくとも "upvote worthy"の範囲に入れることができたら、私に教えてください。 – GhostCat

答えて

2

あなたはほぼそこにいます!

上記はベストプラクティスではありませんが、SwiftとJavaの違いを示しています。まず、Swiftのinternal(アクセス修飾子なし)のメンバーをpublicにしました。これは、Javaのデフォルトのアクセスレベルがpackageであり、それがinternalと少し違うからです。私もReceiptsクラスをpublic staticにしました。 Javaでは、内部クラスはデフォルトでは静的ではないため、Model.Receiptsのようにアクセスするには静的である必要があります。

今ではJavaの規則を次のようにのは、コードを変更してみましょう:スウィフトで

public class Model { 
    private static Model instance = new Model(); 

    public static Model getInstance() { 
     return instance; 
    } 

    public Receipts[] getAllReceipts() { 
     return allreceipts; 
    } 

    public void setAllReceipts(Receipts[] allreceipts) { 
     this.allreceipts = allreceipts; 
    } 

    public static class Receipts { 
     private Bitmap image; 
     private String currentDate = ""; 
    } 

    private Receipts[] allReceipts; 
} 

、シングルトンインスタンスは通常sharedと呼ばれているが、Javaで我々は通常instanceそれを呼び出します。

JavaはSwiftにクールな「プロパティ」がありません。すべてのメンバー変数を非公開にして、それらのゲッターとセッターメソッドを作成する必要があります。この場合、sharedModelletと宣言されているため、ゲッターのみを取得します。 allReceiptsvarなので、ゲッターとセッターの両方を持っています。

+0

長きにわたる例題では上書きされていますが、このアプローチの欠点は依然としてあなたのコードに存在します。そのような完全な配列を完全に設定するような静的なインスタンスを使用する...教育目的のために十分に良いが、言ったように:*良い* OOPは異なって見える。 – GhostCat

2

  • あなたがその内部クラスを作成する必要があり、公共すぎ
  • そのメンバーのための同じ、および配列allReceipts
  • あなたはその配列を作る静的同様に

注:これは一般的には何ですか良いモデルとなります。あなたはシングルトンを使用していて、そのフィールドを返すメソッドを持っていて、そこには静的なものはありません(シングルトンインスタンスを取得するメソッドを除いて)。

あなたはモデルのアイディアが、クラス間の直接的なハード結合につながっていることがわかります。ここで何かを変更したい場合は、すべてのクラスを使用しているクラスを更新することができます。

あなたがここに入れているのは、良いオブジェクト指向設計の反対です。あなたは基本的にプログラムが直接アクセスする必要がある "グローバル"構造体です。そして、彼らは制御されない方法でそれを読み書きします。そういうわけで、あなたは25年前にパスカルのような命令的言語でプログラムを書いていたのです。

良いOOPはカプセル化、情報隠蔽、およそ...

関連する問題