小编tai*_*ion的帖子

有一对执行相同任务的静态和实例方法?

在开发二维矢量类作为数学库的一部分时,我正在考虑为风格和可用性原因设置静态和实例方法.也就是说,两个等效的函数,但一个是静态和非变异的,另一个是实例化和变异的.我知道我不是第一个考虑这个问题的人(例如,见这里),但我没有找到任何直接解决它的信息.

拥有静态和实例方法对的优点:

  • 有些人喜欢使用其中一种,在某些情况下可以选择使代码更容易阅读.
  • 暗示静态方法在提供静态和实例化方法时都不会发生变化.这可以使调用代码更清晰,例如:

    someVector = Vector2d.add(vec1, vec2);
    someVector = (new Vector2d(vec1)).add(vec2); // does the same thing although more convoluted.
    
    // similarly adding directly to a vector is simpler with a mutator method.
    someVector.add(vec2);
    someVector = Vector2d.add(someVector, vec2);
    
    Run Code Online (Sandbox Code Playgroud)

    当使用长链函数调用时,这一点尤其重要,这在向量中很常见.

  • 就地操作可以比为每个操作创建新实例更快地进行计算.用户决定性能何时重要.对于Vector类的用户,性能可能很重要,因为向量经常用于计算代价高昂的代码中.

仅具有静态或实例方法的优点,但不是两者:

  • 没有重要的代码冗余.更易于维护.

  • 减少膨胀.javadocs几乎是其大小的一半.

  • 没有必要通知用户静态方法永远不会变异,非getter实例化方法总是变异.

对静态/实例方法对感到不满?它是否在任何主要图书馆中使用?

模式"静态方法不变异,实例方法吗"广为人知?

java methods refactoring static instance

6
推荐指数
1
解决办法
73
查看次数

标签 统计

instance ×1

java ×1

methods ×1

refactoring ×1

static ×1