不应该使用字符串的情形:
1、字符串不适合代替其他的值类型
- 传入程序的数据是什么类型就用什么类型保存,不是全用字符串保存
2、字符串不适合代替枚举类型
3、字符串不适合代替聚集类型
- 保存多个数据,用一个长字符串(过程慢、繁琐、容易出错)
- 使用一个简单的类描述数据集,成员使用私有静态成员
4、字符串不适合代替能力表
- 上述字符串key 代表一个共享全局命名空间(key 必须唯一、存在巨大安全隐患)
- 如下使用不可伪造的键
- 进一步改进,使用内嵌ThreadLocal
- 非类型安全、进一步改进
- 类型安全的原因是 T 代替Object ,获取值后使用 Object 强转带来类型不安全
- ThreadLocal 更快、更优雅、不基于字符串
总结:
- 如果有更加合适的类型,避免使用字符串代替对象
- 使用不当会显得更加笨拙、不灵活、速度慢、容易出错
- 经常被错误使用字符串代替的类型包括基本类型、聚集类型、枚举类型