Java 谷歌GSON:如何使用@Since注释,例如“version”;1.2.1“;?(无效双精度)
我正在Java应用程序中使用 设想以下情况:在版本Java 谷歌GSON:如何使用@Since注释,例如“version”;1.2.1“;?(无效双精度),java,android,double,gson,Java,Android,Double,Gson,我正在Java应用程序中使用 设想以下情况:在版本1.2.1中添加了一个新的JSON属性。如何在注释中使用此选项?显然,@Since(1.2.1)是不可能的,因为1.2.1不是有效的双精度编码。我的版本格式是。 我注意到的另一件事是,如果我有版本1.20,GSON将其视为比例如版本1.3更低的版本 有什么办法解决这个问题吗?也许可以做一些像定制排他性的工作?(这是否存在?) 除了版本问题,我注意到注释也可以用于类。我找不到关于这个的任何文档。如果有人能解释一下为什么这很有用,我将不胜感激。这看起
1.2.1
中添加了一个新的JSON属性。如何在注释中使用此选项?显然,@Since(1.2.1)
是不可能的,因为1.2.1
不是有效的双精度编码。我的版本格式是。
我注意到的另一件事是,如果我有版本1.20
,GSON将其视为比例如版本1.3
更低的版本
有什么办法解决这个问题吗?也许可以做一些像定制排他性的工作?(这是否存在?)
除了版本问题,我注意到注释也可以用于类。我找不到关于这个的任何文档。如果有人能解释一下为什么这很有用,我将不胜感激。这看起来像是
,因为注释有点有限,不适合您。您需要自定义排除策略是正确的。类似于以下的方法将起作用:
为要使用的版本创建自己的注释,而不是@因为
:
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.TYPE})
@interface VersionAnnotation {
String versionNumber();
}
自定义排除策略:
class VersionExclusionStrategy implements ExclusionStrategy {
private String versionNumber;
VersionExclusionStrategy(String versionNumber) {
this.versionNumber = versionNumber;
}
@Override
public boolean shouldSkipClass(Class<?> classType) {
VersionAnnotation va = classType.getAnnotation(VersionAnnotation.class);
return va != null && versionCompare(this.versionNumber, va.versionNumber()) < 0;
}
@Override
public boolean shouldSkipField(FieldAttributes fieldAttributes) {
VersionAnnotation va = fieldAttributes.getAnnotation(VersionAnnotation.class);
return va != null && versionCompare(this.versionNumber, va.versionNumber()) < 0;
}
private static int versionCompare(String str1, String str2) {
// TODO implement
}
}
我不确定这对课堂有什么用处。您可以对该类进行注释,这样就不必对其他类中的所有类引用进行注释,但仅此而已。谢谢,我已经让它正常工作了。我已经意识到默认的,因为注释不起作用,它太有限了。类的注释实际上非常方便。如果在较新的API版本中引入了一个新的“特性”,我可以只注释类而不是每个新字段。那样的话可读性会更好。
Gson gson = new GsonBuilder().setExclusionStrategies(new VersionExclusionStrategy("1.3")).create();