如何使用具有相同值的多个Java注释?
我正在使用改造和GSON从API检索数据,并使用GSON的如何使用具有相同值的多个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会自动执行此操作,但
@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等名称的类和包最终会成为不知道放在哪里的代码的漏洞。我认为最好花更多的时间定义、重新定义和优化类。它花费的时间太长,但最终的设计通常更强大,可读性和可维护性更强。