IDEA 或 Android Studio 生成 JSON 格式的 toString() 方法

  今天尝试着将实体对象存进 SharedPreference 中的时候遇到了存取格式的问题, 考虑过 Serializable 接口, 又想到了 JSON 格式的对象存取, 于是在网上搜索了相关的方法后发现几乎全是基于 StringBuilder 实现的 (虽然 "+" 在字节码上也是 StringBuilder 实现), 但是有轻微强迫症的我试图尽可能的去掉 IDE 给我的黄色警告, 于是进一步在 automationrhapsody.com (opens new window) 的一篇文章上找到了符合个人理念的实现方式:

简单的 JSON 格式 toString():

public java.lang.String toString() {
    #if ( $members.size() > 0 )
    #set ( $i = 0 )
    return "{\"$classname\":{"
        #foreach( $member in $members )
            #if ( $i == 0 )
                + "##
            #else
                + ", ##
            #end
            #if ( $member.array )
                \"$member.name\":" + java.util.Arrays.toString($member.accessor)
            #elseif ( $member.string || $member.primitive || $member.numeric || $member.boolean || $member.enum )
                \"$member.name\":\"" + $member.accessor + "\""
            #else
                \"$member.name\":" + $member.accessor
            #end
            #set ( $i = $i + 1 )
        #end
        + "}}";
        #else
    return "{$classname}";
    #end
}

会生成如下格式的代码:

    @Override
    public String toString() {
        return "{\"className\":{"
                + "\"field1\":\"" + field1+ "\""
                + ", \"field2\":\"" + field2+ "\""
                + "}}";
    }

如果不想生成 className 的话修改上面第四行和倒数第五行就行了.

原文 (opens new window)还提到了包含 super.toString() 的实现, 这里就不做展示了.