4

我有一个类说Userproperties name, age, nationality,eyeColor 并且我有三个构造函数。

  1. Firebase 所需的空构造函数,
  2. 用户(姓名,国籍),
  3. 用户(姓名、国籍、年龄、眼睛颜色)。

每当我尝试使用构造函数 2 在 Firebase 中保存数据时,我发现数据实际上是使用构造函数 3 保存的age,分别eyeColor0null

如何仅使用构造函数 2 的参数保存数据而不为构造函数 3 创建新类?

4

6 回答 6

2

这是一个有趣的问题。我以前没有遇到过这种情况。但是,在阅读文档后,它说,

首先,创建对用户数据的数据库引用。然后使用 set() / setValue() 将用户对象与用户的用户名、全名和生日一起保存到数据库中。您可以传递设置字符串、数字、布尔值、空值、数组或任何 JSON 对象。传递 null 将删除指定位置的数据。

我想建议像这样构造你的第二个构造函数。

public User(String name, String nationality) {
    this.name = name;  
    this.nationality = nationality;
    this.age = null;
    this.eyeColor = null;
}

我希望这不会将添加的信息保存在用户密钥中。让我知道这是否有帮助!

于 2018-06-18T17:05:48.390 回答
1

尝试添加一个离开ageeyeColor设置为的构造函数null

User(name, nationality, age, eyeColor) {
    this(name, nationality); //age and eyeColor will have the default value - null
}
于 2018-06-18T17:00:56.587 回答
1

0 和 null 是整个 JVM 中所有对象的数字和对象成员的默认值。当你创建一个新对象时,如果你不给成员赋值,他们将获得默认值。如果您不想要默认值,请找到要分配的其他值。

于 2018-06-18T17:04:35.533 回答
0

在 Java中,默认值为String.when您调用时,所有属性都使用默认值.now 当您调用 2nd 时,尽管您正在填充两个属性(名称、国籍),但其他两个属性都达到默认值。nullint0constructorinitializevaluesconstructorinitialize

因此,您应该在保存时编写逻辑(可能是 if 条件)assignconstructor.

于 2018-06-18T18:24:51.120 回答
0

您不能让这些属性根本不显示在数据库中,因为当您创建User类的对象时,这些字段将获得默认值,0并且null.

如果您想确保您的数据库中永远不会有这样的值,那么您可以使用 aMap来写入数据并仅填充您需要的字段。

HashMap<String, Object> map = new HashMap<>();
map.put("name", name);
map.put("nationality", nationality);
userRef.setValue(map);

因此,这将解决您的问题,但不会创建该类的对象。

于 2018-06-19T12:02:24.443 回答
0

您不能选择性地将 JavaBean 对象的哪些属性放入数据库。SDK 将始终使用所有属性,无论它们的值如何。它只会排除其字段或访问器使用@Exclude 注释的属性。

如果您想选择哪些值进入数据库,则必须构建一个 Map 并将值放入其中以存储在数据库中,使用任何逻辑来决定哪些值是合适的。

换句话说,您不能简单地依赖 JavaBean 类型对象的构造函数来确定要从该对象中包含或排除哪些值。您必须编写特殊代码来做出这些决定。

于 2018-06-19T16:34:23.253 回答