本博客站点已全量迁移至 DevDengChao 的博客 https://blog.dengchao.fun , 后续的新内容将优先在自建博客站进行发布, 欢迎大家访问.
今天尝试着将实体存进SharedPreference中的时候遇到了存取格式的问题,考虑过serializable接口,又想到了JSON格式的对象存取,于是在网上搜索了相关的方法后发现几乎全是基于StringBuilder实现的(虽然“+”在字节码上也是StringBuilder实现),但是有轻微强迫症的我试图尽可能的去掉IDE给我的黄色警告,于是进一步在automationrhapsody找到了符合个人理念的实现方式:
简单的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的话修改上面第四行和倒数第五行就行了。
原文还提到了包含super.toString()的实现,这里就不做展示了。