- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
这个问题可能有点主观,但我只是想遵循代码组织的最佳编程实践。
我有一个 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);
但是,我不确定以有意义的方式将这些值存储在何处。
一方面,Polynomial
是使用它们的东西,因此将它们存储在类内部会将其定位到将要使用的位置。这也意味着它可以更改为私有(private),以便仅在一个类中使用。
另一方面,如果它是在 Rational
内部定义的,那么所有对值的调用都会变成 Rational.ZERO
、Rational.ONE
,Rational.NEG_ONE
-- 这使得它非常易于人类阅读,并以词汇上易于理解的方式组织它。如果需要,它还提供了在 Polynomial
中定义类似常量的机会。
所以基本上,撇开意见不谈,在这样的组织中最常见的做法是什么?我的想法是否适合它的任何一个位置,还是有其他我没有考虑过的解决方案?
最佳答案
它们应该在 Rational
类中,因为它们是有理数的抽象。如果您想将它们移动到 RationalPolynomial
类,这将是值得商榷的,但即便如此,我相信将它们保留在 Rational
中会更好。
这样做的一个重要要求是使您的 Rational
类不可变;否则你不应该将它们公开。 Effective Java 在第 76 页提到:
Immutable classes should take advantage of this by encouraging clients to reuse existing instances wherever possible. One easy way to do this is to provide public static final constants for frequently used values. For example, the Complex class might provide these constants:
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);
关于Java 代码组织 : Where to keep instance of static class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19756643/
我是一名优秀的程序员,十分优秀!