|
锁定老贴子 主题:关于常量类
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2004-09-23
一个项目里面,肯定会有一些全局的常量,对于这些常量,我觉得放在一个文件里面一起管理比较好。那么对于这样一个常量集合的文件,是定义成class好呢,还是定义成interface好呢?
[code:1] public interface Const { public static final String PN_EJBPOOL = "EjbPool"; } [/code:1] [code:1] public class Const { public static final String PN_EJBPOOL = "EjbPool"; } [/code:1] 我本人倾向于定义成interface,但是也有很多人反对在interface里面定义常量,想听听大家的意见。 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间:2004-09-23
这里用class还是interface没什么大区别吧?
|
|
| 返回顶楼 | |
|
最后更新时间:2004-09-23
结论是用类。
记得看过一篇解释,和java的class loading机制有关。主要是说用interface可能导致大项目在改动这个interface的时候,需要重新编译。 记不清楚了。 |
|
| 返回顶楼 | |
|
最后更新时间:2004-09-23
其实常量(static final)不管在class还是在interface中都有一个问题
比如你在class A中定义一个常量public static final String PATH="c:\abc"; 在B类中引用这个PATH。当你要改这个PATH时,你还需要编译B类。因为javac编译B类的时候,把static final 的值即"c:\abc"直接编译到B的class文件中了 不知ajoo说的是这个问题吗? 不过为了方便,有的时候我还是用static final。 至于这些参数放在什么地方,我觉得应该放在它的域对象中。而不应该有一个Constant类或接口.比如 public static final int FEMAIL = 1; 放在Employee类中 |
|
| 返回顶楼 | |
|
最后更新时间:2004-09-23
这种做法是不提倡的,应当如albert_qhd所说的。
|
|
| 返回顶楼 | |
|
最后更新时间:2004-09-23
我指的是全局常量,这些常量不属于某一个类,而且会被多个类引用。
如果如 albert_qhd 所说恐怕会引起混乱。而且,对于其他类来说,引用常量类的常量和引用一般类的常量是一样的,你说的那个问题一样存在。 |
|
| 返回顶楼 | |
|
最后更新时间:2004-09-24
我认为放到类里比较合适,一个纯的常量接口就失去接口的作用了,有种大材小用的感觉
|
|
| 返回顶楼 | |
|
最后更新时间:2004-09-24
一般情况下是用类吧。Struts中就有Globals类。
如果这些常量存在于各种类之中,并且存在继承关系,比如Entity接口与实现的所有的具体类,那么将常量写在接口中显得更方便。不过这跟楼主的主题好像有点不太对应…… |
|
| 返回顶楼 | |
|
最后更新时间:2004-09-24
既然声明为public static了,很自然就用了。
不过,这个声明的属性放到哪里到是个问题,基本赞同albert_qht说的。 在Martin Fowler《refactor》中,对于albert讲的这种type类型,提出了三种重构方法,replace type with class,subclass,state/strategy,怎么也没有体会到里面所说的三种方法的利用场合的区别。 |
|
| 返回顶楼 | |
|
最后更新时间:2004-09-24
基本同意albert_qhd的意见
不过对于这段描述:“在B类中引用这个PATH。当你要改这个PATH时,你还需要编译B类。因为javac编译B类的时候,把static final 的值即"c:\abc"直接编译到B的class文件中了 ”个人认为不恰当。 |
|
| 返回顶楼 | |













