不使用API​​会被认为是不好的吗?

时间:2017-02-07 13:49:13

标签: java coding-style

当我开始使用Java编程时,我被教导要始终使用API​​,而不是通过在其中编写已有的概念的自己实现来重新发明轮子。我学习的一般编程方式是,如果我需要的话:

  1. 检查它是否在标准API中。如果是这样,请使用它。
  2. 如果只实现了部分内容,请扩展该类。
  3. 如果不存在这样的情况,请编写自己的实现。
  4. 现在我提到了提高可读性的重点,并且当它只使用标准API的概念时,它更容易理解。虽然,对于第二种情况,最终,它变得非常难以坚持,因为Java中的类通常具有许多一般或额外的功能,我甚至不需要其中的大部分用于我的目的..

    这让我觉得我已经厌倦了编程,因为对我而言,看起来我浪费了大部分时间来试图猜测重新实现课程方法的最佳方式我以某种方式延伸

    • 符合我对此"扩展",
    • 的需求
    • 坚持使用标准API和
    • 定义的规则
    • 与之合作

    最后只有两种方法使用。{/ p>

    所以我的问题是,如果不总是使用标准方式并且有时重新发明这种方式真的那么糟糕。我可能在这里一无所有,但是,随着时间的推移,这对我来说真的变得很重要,并限制了我的可能性。在编程方面,我是一个真正的挑剔者。

    我希望我不是唯一经历过这种情况的人。

    编辑:好的,我知道我必须举一个例子。

    我是在HashSet中存储整数时担心内存使用的人的类型。所以我创建了一个新的类IntSet.java来扩展AbstractSet并尝试使它与原始的int一起工作。现在我无法访问它的基础变量。所以我实际上无法做任何事情,而没有定义新的变量来分配更多的内存,而不是我试图安全地使用类,这意味着我必须编写一个自己的实现,然后重新发明轮子"。

    另一个例子:IntBuffers。如果我需要IntBuffer提供的所有内容(如标记,位置和限制)但希望将其与增长和缩小功能相结合,该怎么办?然后我必须重写整个类,因为它的构造函数是私有的。

1 个答案:

答案 0 :(得分:1)

我认为继承在教育环境中被推得更多。但是当您尝试从Java API中的许多类继承时,它们要么被标记为final,要么具有如此多的私有成员,以至于难以真正修改它们。当然也有例外,例如AbstractList。

它归结为实现接口或使用其他设计模式(如composition / adapter / decorator)通常比继承更适合维护大型不同的代码库。

请参阅:Composition vs. Inheritance discussion