`
bmqnc
  • 浏览: 127508 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

关于API设计的tricky的地方与pitfalls

 
阅读更多
今天看项目中的一段代码,看完之后我对原来的程序员真是抓狂了,代码实在是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这种陷阱只是一方面。



分享到:
评论

相关推荐

    futex are tricky

    Linux内核中的futex机制是一种轻量级的进程同步方法,它在现代线程库的实现中得到了应用,也可以直接用于其他场景。futex(Fast Userspace muTexes的简称)是实现Linux底层锁机制的重要组成部分,尤其是在多线程编程...

    Tricky-开源

    "Tricky-开源"是一个专为Microsoft Windows操作系统设计的小型实用程序集合,它提供了一种无需安装即可便捷使用的方案。这个工具包包含了多种功能,旨在提高用户在日常操作中的效率和便利性。以下是对其中各个组件的...

    Knockout API 中文版

    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

    在"Tricky-Track-3D"项目中,很可能就是通过Unity进行场景构建、角色设计和物理模拟。 3. **游戏逻辑:**C#用于编写游戏逻辑,包括角色行为、游戏规则、交互系统等。例如,可能有控制玩家移动的类,有处理碰撞检测...

    Tricky_Issues_and_Practical_Guidance_in_Medical_Device_Cybers

    Tricky_Issues_and_Practical_Guidance_in_Medical_Device_Cybersecurity 金融安全 网络信息安全 数据分析 安全建设 安全开发

    tricky_signals:逃脱Ruby的Signal.trap!

    然后tricky_signals是您的朋友! 安装 将此行添加到您的应用程序的Gemfile中: gem 'tricky_signals' 然后执行: $ bundle 或将其自己安装为: $ gem install tricky_signals 用法 全局陷阱处理程序 logger = ...

    C程序设计语言(第2版)习题解答英文版

    ### C程序设计语言(第2版)习题解答分析 #### 一、书籍简介 《C程序设计语言》(第2版新版)是一本由C语言的设计者Brian W.Kernighan和Dennis M.Ritchie编写的经典著作。本书不仅介绍了C语言的基础语法和编程方法,...

    c_tricky_questions:c预测输出程序

    标题 "c_tricky_questions:c预测输出程序" 暗示我们正在探讨的是关于C语言编程中的一些棘手问题,特别是那些涉及输出预测的题目。在C语言编程中,这类问题通常涉及逻辑运算、条件判断、循环结构、字符处理、字符串...

    C程序设计语言(第二版)课后答案

    根据提供的信息,《C程序设计语言》(第二版)是一本经典的C语言教程书籍,由Brian W. Kernighan和Dennis M. Ritchie编写。本书不仅深入浅出地介绍了C语言的基本语法和编程技巧,还提供了丰富的习题帮助读者巩固所学...

    Architecting.HBase.Applications.Early.Release

    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 ...

    FoxTools.Lib:http 的客户端库

    Tricky 库旨在与。 棘手的库能够连接到 html 表单,以棘手的方式向棘手的API发出请求,并且同样棘手,处理结果。 对于最棘手的问题,可以选择手动使用API 。 这个棘手的库是在许可下获得许可的。 要求 jQuery v...

    boost.regex手册

    《boost.regex手册》是关于Boost库中正则表达式组件的详细参考资料,它包含了丰富的测试源程序,对于深入理解和应用正则表达式有着极高的学习价值。Boost库是C++编程语言的一个开源库,其中的regex模块提供了强大的...

    C程序设计语言

    根据给定的信息,我们可以从《C程序设计语言》(第二版)这本书中提炼出一系列重要的知识点,特别是关于C语言的基础语法、程序结构以及错误处理等内容。以下是对标题、描述及部分给出的内容进行深入分析和扩展的知识...

    WPF与Flash相互调用-嵌入

    嵌入 Flash 相当于嵌入一个 ActiveX 控件,在嵌入过程中也有一些比较 Tricky 的地方需要注意,下面就在 WPF Application 中嵌入 Flash 控件的步骤进行简要说明,并将遇到的一些需要注意的问题进行提示。 开发环境 ...

    deegeu-tricky-number-stuff:这是 DeegeU.com 上“Tricky Java Number Stuff”视频的源代码

    此存储库的目的是用代码补充视频。 如果您正在学习“”,那么在我们介绍了原语和运算符之后... 您可以通过 deegeu.com、 、 或上的 dj 与我联系。贡献如果您希望对在源代码中发现的任何问题做出贡献,请发出拉取请求。

Global site tag (gtag.js) - Google Analytics