Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用具有相同值的多个Java注释?_Java_Firebase_Annotations_Gson_Retrofit - Fatal编程技术网

如何使用具有相同值的多个Java注释?

如何使用具有相同值的多个Java注释?,java,firebase,annotations,gson,retrofit,Java,Firebase,Annotations,Gson,Retrofit,我正在使用改造和GSON从API检索数据,并使用GSON的@SerializedName注释将其反序列化为Java对象,如下所示: public class MyApiObject { @SerializedName("apiJsonKey") private String myValue; ... } 它工作正常,但我需要将MyApiObject的对象发送到Firebase数据库,为此,需要将对象序列化回JSON。Firebase的Java API会自动执行此操作,但

我正在使用改造和GSON从API检索数据,并使用GSON的
@SerializedName
注释将其反序列化为Java对象,如下所示:

public class MyApiObject {
    @SerializedName("apiJsonKey")
    private String myValue;
    ...
}
它工作正常,但我需要将
MyApiObject
的对象发送到Firebase数据库,为此,需要将对象序列化回JSON。Firebase的Java API会自动执行此操作,但它会根据实例变量的名称(
myValue
)而不是序列化名称(
“apiJsonKey”
)生成密钥

我知道我可以使用Firebase的
@PropertyName
注释,但这需要我使用两个具有相同值的注释,这是冗余的,而且容易出错


有更好的方法吗?

在这种情况下,通常的做法是设置一个常量并在两个注释中使用它

public class MyApiObject {
    private static final String MY_VALUE_NAME = "apiJsonKey";

    @SerializedName(MY_VALUE_NAME)
    @ParameterName(MY_VALUE_NAME)
    private String myValue;
    ...
}

这在JPA的序列注释中非常常见。

我确实考虑过这种方法,但我的类有十几个这样的参数/实例变量,每个参数/实例变量都需要一个单独的常量字符串。这似乎是不必要的,这真的是最好的方式吗?那么也许你的课程代表了太多的东西。当你以大班结束时,这通常意味着他们可能会被分在一起工作的小班。即使您的案例不适合多个类,我认为最好不要引入容易出错的代码,即使代码更大,正如您所说,重复使用同一字符串是一个坏主意。另一种选择是将常量类分隔开。但通常带有常量、common、utils等名称的类和包最终会成为不知道放在哪里的代码的漏洞。我认为最好花更多的时间定义、重新定义和优化类。它花费的时间太长,但最终的设计通常更强大,可读性和可维护性更强。