java - 实现 toString() 时使用反射有意义吗?

标签 java json reflection orm gson

@Override 
public String toString() { 
    return new Gson().toJson(this);
}

我是否打破了一些好的做法,“Joshua”-pattern 事物,一般设计模式或其他约定,只是将其作为我的模型对象的默认行为?

toString() 无论如何只会用于在我们当前使用的范例(Android)中进行调试。这也是我喜欢在 JSON 中看到对象的原因,因为很多 ORM/json 持久性将通过 http->php/python->mysql 和本地 SQLite 发生。

最佳答案

是的。使用 GSON/Jackson/Reflections 库实现 toString() 方法即可。

实现 toString 方法的方法很少。

  1. 反射(Apache 库)

    @Override
    public String toString(){
        return org.apache.commons.lang3.builder.ReflectionToStringBuilder.toString(this);
    }
    
  2. 基于 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;
    }
    
  3. ToStringBuilder(可用于 apache-commons 库)

    @Override
    public String toString() {
        return new org.apache.commons.lang3.builder.ToStringBuilder(this).
            append("field1", field1).
            append("field2", field2).
            toString();
    }
    
  4. 硬核 toString() 实现

    @Override
    public String toString() {
        return new StringBuilder()
            .append("field1:"+field1)
            .append("field2:"+field2)
            .toString();
    }
    
  5. Lombok 注释:在编译时生成 toString()

    import lombok.ToString;
    
    @ToString
    public class ToStringExample {}
    

关于java - 实现 toString() 时使用反射有意义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16527932/

相关文章:

java - 用于自然语言处理的 Python 与 Java

java - 如何重写String类的hashcode方法?

java - 如果在运行时我引用了 bean 实例和属性名称,如何知道属性值?

typescript - 如何在 Type Script 中使用反射获取实现某个基类的子类?

java - 充电困惑 : Google Code Jam [2014]

java - 为什么在使用 SWT GC 绘制文本时文本抗锯齿不起作用?

php - 如何使用 Http.post (Angular 2) 发布 json 对象(php 服务器端)

javascript - JSON 中所需的帮助

c# - (反)序列化类似于 Microsoft 的已知类型

java - 在Java中,可以将一行代码作为方法参数吗?