zoukankan      html  css  js  c++  java
  • java中常量定义在interface中好还是定义在class中

    Java中interface中定义变量都是"public static final" 类型的, 也就是常量, 因此很多人在interface定义常用的常量,除此之外单独定义一个class来保存常量也是一个选择,对于这两种方式哪一种好呢?

    下面是功能等同的两种定义常量的方式: 

    public final class Constants {
        
        private Constants() {}
    
        public static final Integer TIME_OUT = 1000;
    }
    public interface Constants {
    
         Integer TIME_OUT = 1000;
    }

    类定义常量和接口定义常量: 

    1.类定义常量, 需要定义成final且定义一个private的构造方法, 这样做是为了不让其他类继承, 禁止实例化此类, 

    调用时直接以"类.常量"的方式调用. 

    2.接口中定义的"变量", 其实就是常量, 接口中的"变量"默认都是 "public static final"类型, 即为常量, 

    因此接口可以省略"public static final"而直接写成 "type variable".

    3.用如上的类定义常量, 不能实例化也不能被继承, 看起了完美无缺; 

    4.接口定义常量, 虽不能实例化, 确可以被其他类实现;

    因此有这么一种设计模式"The constant interface pattern". 所谓的"常量接口模式",  就是其他类要使用接口中定义的常量, 

    就实现该接口. 我认为这是对接口的烂用. 接口中定义的常量应为所有类频繁使用的常量, 但并不是每个类都使用了接口中定义的所有常量, 

    因而导入了不必要的常量到这个类中, 并且导入后这个类的子类也会基础导入的常量, 这样会导致混乱, 应当避免此种用法.

    5.在interface和class中定义相同的常量, interface生成的class文件比class生成的class文件会更小, 而且更简洁, 效率更高

    所以我更喜欢把常量定义在接口中。

  • 相关阅读:
    字符数组,字符指针,字符串常量以及其sizeof的一些总结
    Linux——makefile
    动态定义多维数组
    二叉树的前序、中序、后序遍历(非递归)
    构造函数、析构函数抛出异常的问题
    倒排索引
    宏定义
    sizeof && strlen
    搜索引擎技术原理
    最小生成树
  • 原文地址:https://www.cnblogs.com/winner-0715/p/6364659.html
Copyright © 2011-2022 走看看