to  treeroot(根根) :
那使用接口里的变量和一般函数的全局变量又有什么区别呢??
谢谢!

解决方案 »

  1.   

    常量接口
    这样违背了,面向对象金字塔型的模型,
    C#里已经去掉了这种定义方法,
    变量应该尽量定义在 最下层的类里,
    即叶子节点上。如果真的需要,可以声明在父类里protected,
    那么子类就能直接用了。
      

  2.   

    楼上说的没错,不过这个问题在java这个领域中也有写争议,包括世界上的一些牛人也有这样用的
      

  3.   

    接口中定义的常量可以在任何地方使用,但是有一个弱点:
    就是实现这个接口的类也有了一份这个拷贝,其实是多余的!
    public interface I{
       static int i=100;  //这里默认是public final
    }
    class C{
       void a(){
          int a=I.i;  //相当于c语言的全局变量
       }
    }
      

  4.   

    在接口里定义静态常量的好处很多,特别适合一些程序常量,而且要在多处使用的常量,因为接口是不可实例的,因此就不会被实例化,那样就仅仅是一个引用,节省资源。因此在接口里面的静态常量就需要接口名来引用了:下面这样做的目的是为了程序的统一,保证不产生过多的临时字符串常量,也不会因为改变字符常量而到处去修改使用到的地方,只需要在接口里面修改字符串的值就ok了
    比如有一个Action操作的接口常量:public interface IConstants{
        /**逻辑执行成功成功*/
        public static final String SUCCESS = "seccess";   /**执行逻辑失败*/
       public static final String FAILURE = "failure";
      /**信息提示key*/  public static final String JSP_INFO = "info";
        
      /**已经存在,无法插入*/  public staitc final String EXIST_ERROR = "对不起,已经存在该数据";}//在别的程序里面就可以这样使用了
    //..... request.setAttribute(IConstants.JSP_INFO, IConstants.EXIST_ERROR);
     mapping.findForward(IConstants.FAILURE);//.....在jsp页面打印错误的时候
    <%
    String info = (String)request.getAttribute(IConstants.JSP_INFO)
    if(info!=null){
    %>
    <%=info%>
    <%
    }else{
    %>
    对不起,无法插入该数据。
    }
    有问题加我msn,只要有时间我一定回复你
    msn: [email protected]
      

  5.   

    楼上的还不如用
    其实还不如用final class来的好呢!!
    用接口是设计上的不当,因为接口会产生负面影响
      

  6.   

    看看Effective Java中关于避免使用常量接口的描述突然想起看到某处这么使用常量接口的,作者的原意是区分对待不同类别的常量,但是又不想针对每一个类别定义各自的常量类。。代码类似于下:
    <<
    final public class Constants {
        public interface AccountStatus {
            public static final int ACTIVE = 0;
            public static final int INACTIVE = 1;
        }    public interface AccountType {
            public static final String ADMIN = "admin";
            public static final String COMMON = "common";
        }
    }使用的时候这么做:
    int status = Constants.AccountStatus.ACTIVE;
    String type = Constants.AccountType.ADMIN;至于这种做法好不好就不评价了
    >>
      

  7.   

    如果是纯粹的常量定义,没有理由用interface不用final class!!!!
      

  8.   

    以前大多说了 接口中变量默认为public final static ,为一常量!引用为
      (ClassName).(接口中的常量名称)