今天看项目中的一段代码,看完之后我对原来的程序员真是抓狂了,代码实在是ugly到了极点。本身那个类继承自ArrayList,姑且不说这种做法多么的ugly,因为实际上通过组合也能达到同样的目的,并且我一直很反感去修改类库的一些代码。继承本身没有错,继承类库的类也没错,错就错实现的代码实在太复杂,本来很简单的一件事情,却搞的超级复杂。
举个例子:
ArrayList中有add(E e) 与add(int index, E element) ,正常的行为是list中加入element对应的元素(是该元素本身),但是现在的程序员重写之后变成第一个只加入element本身,而第二个是加入element里的所有元素(element本身又是一个ArrayList)。姑且不说会不会引起bug,光是这种定义API形式,我觉得实在就够ugly。
当前软件的一个bug有一部分是在于api的bug,即某函数调用了另外一个函数,你以为它确实调用了这个函数,并且即使你调用了你希望调用的函数,并且你期望该函数做了期望做的事情,实际上该函数做的事与你期望的并不相同。
api中的这种也表多。
我觉得好的api设计应该是尽量去避免这种情况。当然自从java引入了泛型之后事情就变得复杂了。但泛型引起的api这种陷阱只是一方面。
分享到:
相关推荐
Linux内核中的futex机制是一种轻量级的进程同步方法,它在现代线程库的实现中得到了应用,也可以直接用于其他场景。futex(Fast Userspace muTexes的简称)是实现Linux底层锁机制的重要组成部分,尤其是在多线程编程...
"Tricky-开源"是一个专为Microsoft Windows操作系统设计的小型实用程序集合,它提供了一种无需安装即可便捷使用的方案。这个工具包包含了多种功能,旨在提高用户在日常操作中的效率和便利性。以下是对其中各个组件的...
As soon as your UI gets nontrivial and has a few overlapping behaviors, things can get tricky and expensive to maintain if you only use jQuery. Consider an example: you’re displaying a list of items,...
在"Tricky-Track-3D"项目中,很可能就是通过Unity进行场景构建、角色设计和物理模拟。 3. **游戏逻辑:**C#用于编写游戏逻辑,包括角色行为、游戏规则、交互系统等。例如,可能有控制玩家移动的类,有处理碰撞检测...
Tricky_Issues_and_Practical_Guidance_in_Medical_Device_Cybersecurity 金融安全 网络信息安全 数据分析 安全建设 安全开发
然后tricky_signals是您的朋友! 安装 将此行添加到您的应用程序的Gemfile中: gem 'tricky_signals' 然后执行: $ bundle 或将其自己安装为: $ gem install tricky_signals 用法 全局陷阱处理程序 logger = ...
标题 "c_tricky_questions:c预测输出程序" 暗示我们正在探讨的是关于C语言编程中的一些棘手问题,特别是那些涉及输出预测的题目。在C语言编程中,这类问题通常涉及逻辑运算、条件判断、循环结构、字符处理、字符串...
Learn document-specific API calls that are tricky or very important for users Get use-case examples for every topic presented Table of Contents Chapter 1. Underlying storage engine - Description ...
Tricky 库旨在与。 棘手的库能够连接到 html 表单,以棘手的方式向棘手的API发出请求,并且同样棘手,处理结果。 对于最棘手的问题,可以选择手动使用API 。 这个棘手的库是在许可下获得许可的。 要求 jQuery v...
《boost.regex手册》是关于Boost库中正则表达式组件的详细参考资料,它包含了丰富的测试源程序,对于深入理解和应用正则表达式有着极高的学习价值。Boost库是C++编程语言的一个开源库,其中的regex模块提供了强大的...
根据给定的信息,我们可以从《C程序设计语言》(第二版)这本书中提炼出一系列重要的知识点,特别是关于C语言的基础语法、程序结构以及错误处理等内容。以下是对标题、描述及部分给出的内容进行深入分析和扩展的知识...
嵌入 Flash 相当于嵌入一个 ActiveX 控件,在嵌入过程中也有一些比较 Tricky 的地方需要注意,下面就在 WPF Application 中嵌入 Flash 控件的步骤进行简要说明,并将遇到的一些需要注意的问题进行提示。 开发环境 ...
【知识点】 此文档是“高二英语上学期第一次联考试题.doc”,属于中学试卷类别,主要测试学生的...试题的设计涵盖了各种生活场景,使学生在学习过程中能够接触到真实的英语交流环境,从而提升他们的语言综合运用能力。
此存储库的目的是用代码补充视频。 如果您正在学习“”,那么在我们介绍了原语和运算符之后... 您可以通过 deegeu.com、 、 或上的 dj 与我联系。贡献如果您希望对在源代码中发现的任何问题做出贡献,请发出拉取请求。