JDKHOME JDKHOME
  • Web

    • 权限框架Twiggy
    • 脚手架BLZO
  • 杂货
技术思考
  • Kubernetes
  • 文档
  • jdkhome
  • 友链
  • 版权声明
  • 分类
  • 标签
  • 归档
  • Web

    • 权限框架Twiggy
    • 脚手架BLZO
  • 杂货
技术思考
  • Kubernetes
  • 文档
  • jdkhome
  • 友链
  • 版权声明
  • 分类
  • 标签
  • 归档
  • java常量之哲学

    • Class 常量类
      • Interface 常量接口
        • 用哪个呢
          • 参考链接
          • 思考
          linkji
          2019-12-02

          java常量之哲学

          # java 常量之哲学

          在java里 我们常用有2种方式定义常量

          • Class
          • Interface

          # Class 常量类

          //final修饰符
          public final class Constants {
              //私有构造方法
              private Constants() {}
          
              public static final int ConstantA = 100;
              public static final int ConstantB = 100;
              ......
          }
          
          1
          2
          3
          4
          5
          6
          7
          8
          9

          # Interface 常量接口

          public interface Constants {
              int ConstantA = 100;
              int ConstantB = 100;
              ......
          }
          
          1
          2
          3
          4
          5

          # 用哪个呢

          首先我们使用常量的原因是为了杜绝魔法变量,我们将常用值放到常量类(或者接口)中统一管理,当某一天我们希望改变这个值时,能够一改都改(而不是东改一下西改一下,牵一发而动全身)。

          那么另一个场景是,你的程序已经部署,正在运行,此时你希望修改某个常量。
          通常来说你可以使用热部署的方式,直接把常量类(或者接口)编译成class,然后替换运行中程序的这个class文件。

          此时就提现出了常量类 和 常量接口的区别

          常量类使用热部署是完全OK的,但是常量接口却不是,某个类通过常量接口引入了常量时,该类被编译时,这个常量会直接写死到class中。

          所以,如果你使用常量接口,又希望热部署的话,你需要把所有使用了该常量类的类全部重新编译并替换才可以。

          搞清楚了区别,下面说说我的想法。

          直接无脑使用常量类,当然是最稳的方案。但是架不住我喜欢常量接口的简洁啊。
          其次,现在都是分布式的程序,在容器中运行,虽然也存在分布式热部署的运维工具,但是如果预先知道这种场景(配置有可能会调整),我会使用配置中心来管理这些配置(比如consul、阿波罗等)。
          实在万不得已要发版解决,也可以使用灰度的方式保证用户的服务。 在这样的条件下,我选常量接口。

          # 参考链接

          • Java Interface 是常量存放的最佳地点吗? bright
          上次更新: 2020/06/11, 18:06:00
          最近更新
          01
          搭建redis
          11-21
          02
          istio安装
          10-25
          03
          搭建K8S高可用集群
          09-13
          更多文章>
          鄂ICP备15015406号 | Copyright © 2015-2020 jdkhome
          • 跟随系统
          • 浅色模式
          • 深色模式
          • 阅读模式