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

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

转载于:https://www.cnblogs.com/winner-0715/p/6364659.html

java中常量定义在interface中好还是定义在class中相关推荐

  1. java项目中常量规范定义的思考

    大言不惭,则无必为之志.--<论语·宪问> 1.引言 最近在看老大在项目中写的代码,发现在系统常量的定义上,与我之前在开发项目的定义有些不一样,引发了我对系统变量如何规范定义和每一种定义有 ...

  2. c语言中后缀字母如 d h b l i,10 C语言中常量的表示.ppt

    10 C语言中常量的表示 第9单元 C语言中常量的表示 数据可以用变量存放,也可以用常量形式表示.常量是程序不可修改的固定值,可以分字面常量和符号常量. 字面常数就是直接书写出来的常数,通常不被单独存 ...

  3. java interface class_Java中常量定义在interface和class的区别(转)

    最终结论:定义常量在interface和class中其实都行,关键是看你的设计和个人爱好. Java中interface中定义变量默认都是"public static final" ...

  4. Java中常量定义在interface和class的区别(转)

    最终结论:定义常量在interface和class中其实都行,关键是看你的设计和个人爱好. Java中interface中定义变量默认都是"public static final" ...

  5. java项目中常量到底该怎么定义

    背景:由于最近要接手一个老的系统,在看代码逻辑的过程中,看到程序中有很多魔法数字,所以着手把系统中的常量单独提取出来,然后定义在常量类中.本来这样就可以完工了,可是我有俩疑问: 1,为什么要将常亮提取 ...

  6. Java中常量定义的几种方式

    编程中使用常量的优点: 常量提取出来有利于代码阅读,而且下次再做这种判断不用手写或复制并且提高代码的复用率,方便修改,直接通过常量类就能得到.不过我觉得提取出来并不会有利于代码性能提升,因为常量分配在 ...

  7. Java中abstract和interface的区别

    abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力. abstract class和inte ...

  8. java面试题41 下面字段声明中哪一个在interface主体内是合法的? ()

    java面试题41 下面字段声明中哪一个在interface主体内是合法的? () A private final static int answer = 42; B public static in ...

  9. java 常量定义_Java中常量定义的几种方式

    编程中使用常量的优点: 常量提取出来有利于代码阅读,而且下次再做这种判断不用手写或复制并且提高代码的复用率,方便修改,直接通过常量类就能得到.不过我觉得提取出来并不会有利于代码性能提升,因为常量分配在 ...

  10. Java中需要全部小写的是,下列哪些是Java中常量的命名约定?A、全部为小写字母B、全部为大写字母C、大小写混合D、字与字之间...

    下列哪些是Java中常量的命名约定?A.全部为小写字母B.全部为大写字母C.大小写混合D.字与字之间 更多相关问题 She knew so many men who had been trained ...

最新文章

  1. 2021-2027年中国市医疗电子场投资分析及前景预测报告
  2. docker环境无法执行jmap -heap 56命令
  3. php ci cookie使用,CI框架实现cookie登陆的方法详解
  4. resin设置jvm参数
  5. boost::math::chi_squared用法的测试程序
  6. jenkins 部署文档
  7. 阿里P9谈程序员程序员的青春饭
  8. JDK 9:模块系统状态的重点
  9. 《Python Cookbook 3rd》笔记(5.4):读写字节数据
  10. 纯html5+css3能写出什么惊人效果?
  11. apt报错Hash 校验和不符解决办法
  12. PyTorch系列入门到精通——GPU的使用
  13. 引用计数和AddRef、Release
  14. 一款超级炫酷的编辑代码的插件 Power Mode
  15. 面向对象(Python):学习笔记之私有属性和私有方法
  16. AppDynamic自定义统计异常reportError,实时显示结果
  17. python写一个定时关机软件
  18. Html实现QQ音乐首页(响应式)
  19. 路由器硬改+刷OpenWrt+挂载摄像头+U盘
  20. Ubuntu18.04局域网共享文件夹,实现win7和Ubuntu本地访问

热门文章

  1. Infor与Marketo®合作,帮助全球企业实现客户体验变革
  2. 赛可达实验室发布2015测评认证标准
  3. BZOJ1016 [JSOI2008]最小生成树计数
  4. db2 命令选项解释
  5. Java设计模式11:Facade
  6. IT历史:IT史重大失败教训
  7. 想开发一个背单词的学习软件
  8. oracle关于分区,关于Oracle分区
  9. MySQL助手_java 8.0Mysql 助手类
  10. mysql数据库教程全解_MySQL数据库基础教程详解