2017-09-02 58 views
0

我正在將應用程序從Swift轉換爲android。我在swift中使用了一個靜態類來存儲這樣的一些數據。如何在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

我希望您注意到,您接受的解決方案基本上是在執行之前列出的所有內容。隨時讓我知道,如果我可以添加一些東西給我的答案,讓它至少達到你的眼中「值得讚賞」的範圍。 – GhostCat

回答

2

就快成功了!

以上不是最佳實踐,但它向您展示了Swift和Java的不同之處。首先,我在Swift public中創建了(沒有訪問修飾符)成員。這是因爲Java中的默認訪問級別爲package,與internal有點不同。我也做了Receiptspublic 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中缺乏很酷的「屬性」。你應該讓所有的成員變量都是私有的,併爲它們創建getter和setter方法。在這種情況下,sharedModellet一起聲明,所以它只能得到一個getter。 allReceipts是一個var,所以它有一個getter和一個setter。

+0

Upvoted爲冗長的示例 - 但請注意:關於此方法的不足之處仍存在於您的代碼中。使用類似這樣的靜態實例,在其上完全設置完整的數組......足夠用於教育目的,但如下所述:*好的* OOP看起來不同。 – GhostCat

2

在幾乎同一事項:

  • 你不得不做出這樣的內部類,公共
  • 同樣爲它的成員,並且陣列allReceipts
  • 您作出這樣的陣列靜態以及

但注意:那通常不是什麼模型會做。如果有的話,你會使用一個單例 - 並且你將有一個方法返回該字段 - 並且沒有任何內容會有靜態的(也許除了獲取單例實例的方法外)。

您會發現 - 您對模型的想法會導致類之間的直接耦合。假設你想在這裏改變一些東西 - 你可能會更新全部正在使用它的類。

你在這裏放置的是好的面向對象設計的反面。你基本上是一個「全局」的結構,程序然後必須直接訪問。然後他們以不受控制的方式讀取/寫入。這就是你如何用25年前的帕斯卡這樣的命令式語言編寫程序。

良好的面向對象是關於封裝,信息隱藏,...