我有一个班级User
,其中包含name
,age
,nationality
,eyeColor
我有三个构造函数。
每当我尝试使用构造函数2在Firebase中保存数据时,我发现数据实际上是使用构造函数3保存的,其中age
和eyeColor
为0
和null
分别
如何在不为构造函数3创建新类的情况下仅使用构造函数2的参数保存数据?
答案 0 :(得分:2)
这是一个有趣的问题。我以前没有遇到过这种情况。但是,在阅读了documentation之后,
首先,创建对用户数据的数据库引用。然后使用set()/ setValue()用户将用户对象保存到数据库 用户名,全名和生日。你可以传递一个字符串,数字, boolean,null,array或任何JSON对象。 传递null将删除 指定位置的数据。
我想建议像这样构建你的第二个构造函数。
public User(String name, String nationality) {
this.name = name;
this.nationality = nationality;
this.age = null;
this.eyeColor = null;
}
我希望这不会将添加的信息保存在用户密钥中。如果有帮助,请告诉我!
答案 1 :(得分:1)
尝试添加一个将age
和eyeColor
设置为null
的构造函数
User(name, nationality, age, eyeColor) {
this(name, nationality); //age and eyeColor will have the default value - null
}
答案 2 :(得分:1)
0和null是整个JVM中所有对象的数字和对象成员的默认值。创建新对象时,如果您没有为成员分配值,则会获得默认值。如果您不想要默认值,请找到要分配的其他值。
答案 3 :(得分:0)
在Java中String
默认值为null
,int
默认值为0
。当您致电constructor
时,所有属性都会获得initialize
默认values
。当您拨打第二constructor
时,虽然您正在填写两个属性(姓名,国籍),但其他两个属性initialize
为默认值。
因此,您应该在assign
中保存(可能是条件)或constructor
期望值时编写逻辑。
答案 4 :(得分:0)
您无法在数据库中根本不显示那些属性,因为在创建User
类的对象时,这些字段将获得默认值0
和{{1 }}。
如果要确保数据库中永远不会包含此类值,则可以使用null
写入数据并仅填充所需的字段。
Map
因此,这将解决您的问题,但无需创建该类的对象。
答案 5 :(得分:0)
您不能选择将JavaBean对象的哪些属性添加到数据库中。 SDK始终会始终使用所有属性,而不管其值如何。它只会排除使用@Exclude注释其字段或访问器的属性。
如果要选择将哪些值放入数据库中,则必须构造一个Map并将这些值放入数据库中,并使用任何逻辑来决定哪些值合适。
换句话说,您不能简单地依靠JavaBean类型对象的构造函数来确定要从该对象中包含或排除哪些值。您必须编写特殊的代码才能做出这些决定。