在开发二维矢量类作为数学库的一部分时,我正在考虑为风格和可用性原因设置静态和实例方法.也就是说,两个等效的函数,但一个是静态和非变异的,另一个是实例化和变异的.我知道我不是第一个考虑这个问题的人(例如,见这里),但我没有找到任何直接解决它的信息.
拥有静态和实例方法对的优点:
暗示静态方法在提供静态和实例化方法时都不会发生变化.这可以使调用代码更清晰,例如:
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实例化方法总是变异.
对静态/实例方法对感到不满?它是否在任何主要图书馆中使用?
模式"静态方法不变异,实例方法吗"广为人知?