Java代码组织:在哪里保留静态类的实例

Hum*_*ler 5 java code-organization organization

这个问题可能有点主观,但我只是想按照最好的编程实践来组织代码.

我有一个类Polynomial,它引用了很多类Rational,并且在许多不同的方法中,它使用一个Rational等于1,0或-1的值进行比较.

因此,我定义了以下常量:

public static final Rational ZERO    = new Rational(0);
public static final Rational ONE     = new Rational(1);
public static final Rational NEG_ONE = new Rational(-1);
Run Code Online (Sandbox Code Playgroud)

但是,我不确定的是在哪里以有意义的方式存储这些值.

一方面,Polynomial使用它们的是什么,因此将它们存储在类中将它本地化到它将被使用的位置.这也意味着它可以更改为private,以便仅在一个类中使用.

在另一方面,如果内部定义Rational,然后到值的所有通话变得Rational.ZERO,Rational.ONE,Rational.NEG_ONE-这使得它非常可读的,并组织其在词汇理解的方式.它还提供了定义类似常量的机会,Polynomial如果需要的话.

所以基本上,除了意见之外,组织在这样的事情中最常见的做法是什么?我的想法是否适合它的任何一个位置,还是有其他解决方案我没有考虑过?

m3t*_*man 9

他们应该在Rational课堂上,因为它们是理性数字的抽象.如果你想把它们转移到一个RationalPolynomial班级,这将是有争议的,但即便如此,我相信保持它们Rational会更好.

这样做的一个重要要求是使你的Rational类不可变 ; 否则你不应该公开他们.有效的Java提及第76页:

不可变类应该通过鼓励客户尽可能重用现有实例来利用这一点.一种简单的方法是为常用值提供公共静态最终常量.例如,Complex类可能提供以下常量:

public static final Complex ZERO = new Complex(0, 0);
public static final Complex ONE = new Complex(1, 0);
public static final Complex I = new Complex(0, 1);
Run Code Online (Sandbox Code Playgroud)