论坛首页 Java版

关于常量类

浏览 3659 次
锁定老贴子 主题:关于常量类
精华帖 (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里面定义常量,想听听大家的意见。
   
最后更新时间:2004-09-23
这里用class还是interface没什么大区别吧?
   
0 请登录后投票
最后更新时间:2004-09-23
结论是用类。
记得看过一篇解释,和java的class loading机制有关。主要是说用interface可能导致大项目在改动这个interface的时候,需要重新编译。
记不清楚了。
   
0 请登录后投票
最后更新时间: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类中
   
0 请登录后投票
最后更新时间:2004-09-23
这种做法是不提倡的,应当如albert_qhd所说的。
   
0 请登录后投票
最后更新时间:2004-09-23
我指的是全局常量,这些常量不属于某一个类,而且会被多个类引用。
如果如 albert_qhd 所说恐怕会引起混乱。而且,对于其他类来说,引用常量类的常量和引用一般类的常量是一样的,你说的那个问题一样存在。
   
0 请登录后投票
最后更新时间:2004-09-24
我认为放到类里比较合适,一个纯的常量接口就失去接口的作用了,有种大材小用的感觉
   
0 请登录后投票
最后更新时间:2004-09-24
一般情况下是用类吧。Struts中就有Globals类。

如果这些常量存在于各种类之中,并且存在继承关系,比如Entity接口与实现的所有的具体类,那么将常量写在接口中显得更方便。不过这跟楼主的主题好像有点不太对应……
   
0 请登录后投票
最后更新时间:2004-09-24
既然声明为public static了,很自然就用了。

不过,这个声明的属性放到哪里到是个问题,基本赞同albert_qht说的。

在Martin Fowler《refactor》中,对于albert讲的这种type类型,提出了三种重构方法,replace type with class,subclass,state/strategy,怎么也没有体会到里面所说的三种方法的利用场合的区别。
   
0 请登录后投票
最后更新时间:2004-09-24
基本同意albert_qhd的意见
不过对于这段描述:“在B类中引用这个PATH。当你要改这个PATH时,你还需要编译B类。因为javac编译B类的时候,把static final 的值即"c:\abc"直接编译到B的class文件中了 ”个人认为不恰当。
   
0 请登录后投票
论坛首页 Java版

跳转论坛:
JavaEye推荐