如何在Java中创建静态模型?

时间:2017-09-02 04:49:23

标签: java swift

我正在将应用程序从Swift转换为android。我在swift中使用了一个静态类来存储这样的一些数据。

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;
  }

如何在Swift中使用Java做同样的事情,我可以从任何地方调用此类并访问它?

2 个答案:

答案 0 :(得分:2)

几乎同样的事情:

  • 你必须制作那个内部类, public
  • 其成员和数组allReceipts
  • 相同
  • 你也可以使 static

但请注意:这通常不是良好模型所能做到的。如果有的话,你将使用一个Singleton - 并且你将有一个方法来返回该字段 - 并且那里的任何内容都不会是静态的(可能除了获取单例实例的方法之外)。

你知道 - 你对模型的想法导致了类之间的直接硬耦合。假设您想在此处更改某些内容 - 您可以更新正在使用它的所有类。

你放在这里与优秀的OO设计相反。你基本上是一个“全局”结构,然后程序必须直接访问。然后他们以不受控制的方式读/写。这就是25年前你用Pascal这样的命令式语言编写程序的方法。

良好的OOP是关于封装,信息隐藏,......

答案 1 :(得分:2)

你快到了!

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

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

   public Receipts[] allreceipts;
}

以上不是最佳实践,但它向您展示了Swift和Java的不同之处。首先,我在Swift internal中创建了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;
}

在Swift中,单例实例通常称为shared,但在Java中我们通常将其称为instance

Java在Swift中缺乏酷炫的“属性”。您应该将所有成员变量设为私有,并为它们创建getter和setter方法。在这种情况下,sharedModel声明为let,因此它只会获得一个getter。 allReceiptsvar,因此它同时包含一个getter和一个setter。