java中常量定义在interface中好还是定义在class中
2017-02-04 12:47
387 查看
Java中interface中定义变量都是"public static final" 类型的, 也就是常量, 因此很多人在interface定义常用的常量,除此之外单独定义一个class来保存常量也是一个选择,对于这两种方式哪一种好呢?
下面是功能等同的两种定义常量的方式:
类定义常量和接口定义常量:
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文件会更小, 而且更简洁, 效率更高
所以我更喜欢把常量定义在接口中。
下面是功能等同的两种定义常量的方式:
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文件会更小, 而且更简洁, 效率更高
所以我更喜欢把常量定义在接口中。
相关文章推荐
- JAVA中的常量定义在class中还是interface中比较合理?
- 关于 "java中常量定义在interface中好还是定义在class中好" 的一些思考
- JAVA中的常量定义在class中还是interface中比较合理?
- JAVA中的常量定义在class中还是interface中比较合理?
- Java中常量定义在interface和class的区别(转)
- Java中定义常量方法及建议(Class/Interface)
- Java常量放在Class还是Interface?
- 2015年11月26日 Java基础系列(四)class的定义,继承和实现interface
- java web开发中public static final定义常量还是写入properties文件,两者区别
- 静态常量使用class还是interface?
- Java移位运算符定义常量
- 更新Java final常量后,请重新编译你的class
- Java Abstract class and Interface
- difference between Interface and abstract class in Java
- 如何在Java中定义常量(Constant)
- Java的类(class)、包(package)和接口(interface)
- Java Interface 是常量存放的最佳地点吗?
- Hibernate3.5却报异常 java.lang.IncompatibleClassChangeError: class org.hibernate.cfg.ExtendedMappings has interface
- Java的一个编译错误解决方法:需要class interface enum
- java编译错误:需要class或interface,GBK的不可映射字符