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

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

  • 相关阅读:
    yii2.0 邮件发送如何配置
    php(ThinkPHP)实现微信小程序的登录过程
    微信小程序开发
    一个中高级PHP工程师所应该具备的能力
    如何解决PHP的高并发和大流量的问题
    对于PHP面试知识点的小结
    Centos7 redis设置开机自启动
    CENTOS7下REDIS设置密码、开放远程访问权限
    CentOS7安装Redis
    SQL Server 2012允许远程连接(Windows Server 2016)
  • 原文地址:https://www.cnblogs.com/winner-0715/p/6364659.html
Copyright © 2011-2022 走看看