当前位置: 首页 > 面试题库 >

恒定接口反模式澄清

赵兴朝
2023-03-14
问题内容

我只是在某处读到,具有与常见项目常量的接口是不好的做法,也称为“
常量接口反模式”。如果我正确理解这一点,提供的原因是,一旦实现,该类将向公众公开这些常量。

好吧,我首先不理解“实施”的必要性。是否可以直接使用这些静态常量?那么,为什么我必须经历import static什么时候才能做类似的事情:

interface Constants {
    public static final int FOO_1 = 1;
    public static final int FOO_2 = 2;
}

public class Test {
    public static void main(String[] args) {
        System.out.println(Constants.FOO_2);
    }
}

我将不胜感激任何指导,以帮助我更多地了解这一点。


问题答案:

我意识到……如果需要的话,该接口可以由个人实现,从而为上述问题(例如,命名空间污染,非常规使用,通过公共API公开)留出了空间。因此,最好是完全阻止实现接口的功能。因此,拥有一个final带有私有构造函数的类是更合适的,这样它就不能被实例化/扩展。

public final class Constants
{
      // to restrict instantiathtml" target="_blank">ion
      private Constants() {}

      public static final double PI = 3.14159;
      public static final double PLANCK_CONSTANT = 6.62606896e-34;
}

…并将其与结合使用import static

import static Constants.PLANCK_CONSTANT;
import static Constants.PI;

public class Calculations
{   
      public double getReducedPlanckConstant()
      {       
            return PLANCK_CONSTANT / ( 2 * PI );   
      }
}


 类似资料:
  • 问题内容: (学问) 根据 维基百科 ,有3种类型的多态性: 临时多态性 指可以应用于不同类型参数的多态函数,但其​​行为取决于所应用参数的类型而有所不同 换句话说:重载: 参数多态性 允许以通用方式编写函数或数据类型,以便它可以相同地处理值而无需依赖其类型 换句话说:泛型 范例: 亚型多态性 允许将函数编写为采用某种类型T的对象,但如果传递了属于类型T的子对象S的对象,则该函数也可以正常工作 (

  • 为什么叫“函数式模型”,请查看“Keras新手指南”的相关部分 Keras的函数式模型为Model,即广义的拥有输入和输出的模型,我们使用Model来初始化一个函数式模型 from keras.models import Model from keras.layers import Input, Dense a = Input(shape=(32,)) b = Dense(32)(a) mode

  • Java8在接口上引入了默认方法,为collections接口的实现提供向下兼容,以避免遗留库上的MethodNotFound错误。 也就是说,具有Java7实现List的库不会实现stream()方法。如果Java8代码使用这个库,默认实现提供了一个后退。 我在实践中看到的是,许多开发人员过度使用这个特性,以类似scala特性的风格来模拟混合和多重继承。 我担心的一个问题是,这种编程风格模糊了接

  • 问题内容: 以下是React中的反模式吗?我喜欢这种模式,因为当实例化一个组件时,它在静态函数中为我提供了上下文。然后,我可以导入该类并调用静态方法来修改状态。还是可以通过更好的方式来完成? 问题答案: 显然,这取决于条件,可能是一种反模式,也可能是一个错误。静态类方法不应与类实例一起使用。绑定到特定的组件实例和用途,这只能证明类是单例是合理的(尽管单例也经常是反模式)。如果期望有多个类实例,那么

  • 在软件工程中,一个反面模式(anti-pattern或antipattern)指的是在实践中明显出现但又低效或是有待优化的设计模式,是用来解决问题的带有共同性的不良方法。它们已经经过研究并分类,以防止日后重蹈覆辙,并能在研发尚未投产的系统时辨认出来。 软件设计 抽象倒置(Abstraction inversion):不把用户需要的功能直接提供出来,导致他们要用更上层的函数来重复实现 用意不明(Am

  • 我对Firebase定价模型有点困惑,特别关注的是连接或更准确地说是并发连接。 让我们举一个iOS移动应用程序FanZONE的例子: 用户将在足球比赛期间创建组。他们将对实际比赛进行评论,评论将立即显示在每个会员屏幕上。 这种情况是否意味着参与评论/查看的每个用户都会对一个连接计数 那么,如果一个组包含100个积极关注屏幕并不时发表评论的用户,那么每90分钟是否有100个连接 后台有应用程序的用户