@Override
public String toString() {
return new Gson().toJson(this);
}
我是否打破了一些好的习惯,“约书亚”模式通过简单地将其作为我的模型对象的默认行为来
toString()
无论如何,仅用于在我们当前使用的范例(Android)中进行调试。这也是我喜欢在 JSON 中看到对象的原因,因为许多 ORM/json 持久性将通过 http->php/python->mysql 和本地 SQLite 发生。
@Override
public String toString() {
return new Gson().toJson(this);
}
我是否打破了一些好的习惯,“约书亚”模式通过简单地将其作为我的模型对象的默认行为来
toString()
无论如何,仅用于在我们当前使用的范例(Android)中进行调试。这也是我喜欢在 JSON 中看到对象的原因,因为许多 ORM/json 持久性将通过 http->php/python->mysql 和本地 SQLite 发生。
是的。可以使用 GSON/Jackson/Reflections 库来实现 toString() 方法。
实现 toString 方法的方法很少。
反射(Apache 库)
@Override
public String toString(){
return org.apache.commons.lang3.builder.ReflectionToStringBuilder.toString(this);
}
基于 JSON 的实现(GSON、Jackson 库)
// GSON library for JSON
@Override
public String toString(){
return new com.google.gson.Gson().toJson(this);
}
// Jackson libabry for JSON/YAML
@Override
public String toString() {
try {
return new com.fasterxml.jackson.databind.ObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(this);
} catch (com.fasterxml.jackson.core.JsonProcessingException e) {
e.printStackTrace();
}
return null;
}
ToStringBuilder(可与 apache-commons 库一起使用)
@Override
public String toString() {
return new org.apache.commons.lang3.builder.ToStringBuilder(this).
append("field1", field1).
append("field2", field2).
toString();
}
核心 toString() 实现
@Override
public String toString() {
return new StringBuilder()
.append("field1:"+field1)
.append("field2:"+field2)
.toString();
}
Lombok 注释:在编译时生成 toString()
import lombok.ToString;
@ToString
public class ToStringExample {}
这样做没有坏处。我建议您为您的Gson
实例创建一个静态变量并启用漂亮的打印:
static Gson gson = new GsonBuilder().setPrettyPrinting().create();
这样,方法的输出toString
将被格式化。
注意:如果你在 toString() 方法中使用 GSon 漂亮的打印,它在你的调试器中看起来就像垃圾,因为它会充满换行符。
(抱歉没有足够的代表在上面发表评论)
这对性能不利,因为 Gson 使用自省来确定要打印的字段。
除此之外,我觉得还可以。这不是标准的 Java toString 实现,但我不认为改变它是一种反模式。