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文件会更小, 而且更简洁, 效率更高

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

  • 相关阅读:
    Rsync实现文件同步的算法(转载)
    Python模拟登录cnblogs
    负载均衡中四层和七层的介绍(转帖)
    Lvs+Keepalived实现MySQL高可用
    MySQL配置主主及主从备份
    Vim扩展YouCompleteMe插件
    使用Git
    Django回忆录
    Ansible安装配置及使用
    Hive学习之四 《Hive分区表场景案例应用案例,企业日志加载》 详解
  • 原文地址:https://www.cnblogs.com/winner-0715/p/6364659.html
Copyright © 2011-2022 走看看