今天尝试着将实体对象存进 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() 的实现, 这里就不做展示了.