为什么语言设计者允许接口包含字段?

时间:2015-12-20 01:54:51

标签: java interface constants

根据Effective Java中的第19项,必须使用接口来仅表示类型。在这种情况下,接口将包含构成公共合同一部分的方法,这些方法由类(实现接口)向客户端公开

如果是这样,为什么接口首先支持字段?由于字段是隐式公共的,静态的,最终的(因而是常量),为什么语言设计者支持它们呢?如果它们不受支持,那么开发人员总是会使用utils类(使用私有构造函数)来定义这些常量。只能使用常量接口的反模式可以自动避免

我正在研究在界面中理解支持常量的原因。作为与客户的合同的一部分,它们是否必不可少?

由于

1 个答案:

答案 0 :(得分:1)

一个原因可能是对接口合同至关重要的常量。例如,请考虑以下界面:

/**
* Generates a probability distribution on a
* specified interval.
*/
public interface DistributionGenerator{
    /*
    * Gets a probability distribution on the specified
    * interval. The exact distribution is unique to the 
    * implementor of this interface. The distribution will
    * be represented as an array of doubles. The first number
    * in the returned array will be the probability at start
    * The last number will be the probability at end. All numbers
    * in between will be probabilities at evenly spaced 
    * intervals between start and end, with the spacing between values
    * given by the constant INTERVAL
    */
    public double[] getDistribution(double start,double end);

    public static final double INTERVAL = 0.000001;
}

然而,正如您所观察到的,大多数情况下,您在界面中看到常量,只是为了自己而简单地公开常量,这是generally considered bad practice