我最近遇到了使用 AutoValues (GSON) 扩展来加速解析我们的 json 数据的概念。我们实际上发现它解析我们的 json 的速度是原来的两倍。
但我错过了一点,使用 AutoValues 时的数据集是不可变的,但我们的数据集/模型通常与 json 相似,并且不需要映射器。
因此,如果我想在我的模型类中设置单个数据元素,这看起来不可行(因为我们只有抽象的 getter 而没有 setter。有没有办法解决这个问题或者我错过了一点。我将使用示例代码进行解释我们所做的以及使用 AutoValue 的类似语法。
所以我们通常会编写类似的代码
public class ModelClass{
private String aValue;
private String anotherValue;
public String getAValue(){
return this.aValue;
}
public void setAValue(String aValue){
this.aValue = aValue;
}
public String getAnotherValue(){
return this.anotherValue;
}
public String setAnotherValue(anotherValue){
this.anotherValue = anotherValue
}
}
public class ViewClass{
public void foo(){
String json = {"aValue":"This is a sample string", "anotherValue": "this is another string"};
ModelClass model = gson.fromJson(json, ModelClass.class);
model.getAValue();
model.setAValue("this is a new value"); // and we can set individual element ModelClass.aValue
}
}
但是在使用 Auto Value 时,模型类的结构更改为
@AutoValue public abstract class AutoValueModel{
public abstract String bValue();
public abstract String otherValue();
public static AutoValueModel(String bValue, String otherValue){
return new AutoValue_AutoValueModel(bValue, otherValue);
}
}
// 现在您可以看到 AutoValueModel 结构不包含任何设置器,如果我只想更改 bValue(基于用户操作,即使我知道 AutoValues 背后的基本前提是它们是不可变的)并继续使用在代码的其他部分。然后使用相同的 AutoValueModel 序列化一个 json。还是应该使用 AutoValue 技术进行反序列化,然后使用可以对数据集执行更改的映射模型?(如果我使用这种技术,我会失去使用 AutoValue 获得的速度优势吗?)
还从我了解 AutoValues 的地方参考: