写点什么

代码之丑(十三)–封装代替嵌套容器

  • 2012-06-26
  • 本文字数:905 字

    阅读完需:约 3 分钟

第一次见到这样的代码时,我的第一感觉是,它真复杂:

复制代码
List<Map<String, String>> configurations;

可只要理性稍一回归,便不难察觉,它少东西了。少什么了呢?

看看这段代码如何使用,下面是一个缩略的版本:

复制代码
for (Map<String, String> configuration : configurations) {
for (Map.Entry<String, String> entry : configuration.entrySet()) {
System.out.println(entry.getKey() + " " + entry.getValue());
}
}

说白了很简单,其实就是要拿到存在 Map 里的键值对。在面向对象的程序语言中,有一种神奇的构造,叫做类,而它有一个很重要的特点叫做封装。是的,这段代码少了类,少了封装。闲言少叙,封装起来:

复制代码
public class ConfigurationItem {
private String name;
private String value;
...
}

于是,那个容器嵌套容器的声明变成了

复制代码
List<ConfigurationItem> configurations;

有了类,有了封装,我们就可以再进一步进行封装,比如前面那段代码里的

复制代码
entry.getKey() + " " + entry.getValue()

实际上,可能只是为了得到这一项的字符串表示而已,那就不如直接提供一个方法:

复制代码
public class ConfigurationItem {
...
@Override
public String toString() {
return name + " " + value;
}
}

于是,前面那个双重 for 循环就变化了:

复制代码
for (ConfigurationItem item : configurationItems) {
System.out.println(item);
}

单以丑陋而言,这段代码还算不上此类的极致,三五层嵌套也是有的,如果某些貌似负责的程序员再给每层取值都加上非空判定,那场面可是相当壮观的。

当容器开始嵌套容器,请考虑封装。

作者简介

郑晔,ThoughtWorks 公司首席咨询师,拥有十多年企业级软件开发经验,热衷于探索各种程序设计语言在真实软件开发中所能发挥的威力,致力于探寻合理的软件开发方式,加入 ThoughtWorks 公司后,投入到敏捷开发方法的实践之中,为其他公司提供敏捷开发方法方面的咨询服务。他的 blog 是梦想风暴,其微博是 @dreamhead

查看原文:代码之丑(十三)


感谢张凯峰对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2012-06-26 00:004135
用户头像

发布了 22 篇内容, 共 14.8 次阅读, 收获喜欢 49 次。

关注

评论

发布
暂无评论
发现更多内容

行业专家齐聚 | 共探跨端动态化新态势

京东零售技术

SSH终端应用Prompt 3 for mac

晨光熹微

Mac文件提取工具File Juicer

晨光熹微

Mac在线视频下载工具Downie for mac

晨光熹微

博世X阿里云:智能座舱接入通义大模型!

科技汇

5G-A与AI共舞,广东移动烹出高铁网络加速包

脑极体

AI

中高考季,盘点AI文档工具有哪些实用的创新?

合合技术团队

人工智能 大数据 算法

B2B企业如何快速实现SCRM搭建?Custouch市场易来助力!

极客天地

不用WebSocket也能搞定实时消息推送?试一试SSE吧!

左诗右码

深度解析 Cursor(逐行解析系统提示词、分享高效制定 Cursor Rules 的技巧...)

Baihai IDP

人工智能 AI 智能体 cursor AI 编程

Carbon Copy Cloner for Mac(磁盘克隆/同步/备份软件)

Geek贝

智能车间管理系统(源码+文档+讲解+演示)

深圳亥时科技

100%加密计算+端云延迟无感:火山引擎如何实现AI安全与性能兼得?

新消费日报

火山引擎边缘计算节点也支持 MCP 了!快来 get 这份使用教程

火山引擎边缘云

边缘计算 MCP MCP Server

Raw查看器FastRawViewer for mac

晨光熹微

Wall-Clock 与 CPU-Cycles 采样的区别

mazhen

Linux Performance perf kernel

Mac序列号、激活码分享工具KCNcrew Pack v1.8

晨光熹微

大模型技术持续演进,安卓厂商携手火山引擎加速推动AI能力融入终端体验

新消费日报

火山引擎以实用AI赋能效率跃迁与创作升级,解锁智慧生活新图景

新消费日报

GreatSQL从库报错13146:字符集不一致问题处理

GreatSQL

扎克伯格亲自发Offer,年薪超千万美元:AI抢人大战“卷疯了”

Y11

求职 找工作 大模型

华为开发者大会2025来袭,华为云开源邀您一同共赴盛会

华为云开源

开发者 云原生 华为云开源 华为开发者大会2025

京东商品列表数据接口详解

tbapi

京东API 京东商品列表API 京东数据采集

九家Top手机厂商牵手火山引擎,共建AI助手新生态

新消费日报

火山引擎携手厂商共同推动手机 AI 应用迈向智能化、全能化新高度

新消费日报

火山引擎全栈 AI 服务再升级,七大合作成果引爆智能终端生活新想象

新消费日报

Mac应用序列号查找工具Serial Box for mac

晨光熹微

代码之丑(十三)–封装代替嵌套容器_语言 & 开发_郑晔_InfoQ精选文章