几个数据类型
1 private static final Set<Integer> _PERMISSION= new TreeSet<Integer> ();
static {
        _PERMISSION.add (new
。。                        直觉这是一个枚举, 
public static final Set<Integer> PERMISSION_TYPE = Collections.unmodifiableSet (_PERMISSION);
为什么前面定义了 _PERMISSION=,之后又再次定义PERMISSION_TYPE (是否必须,为什么?)
2又看到一个枚举类,如何理解
public enum ColumnName {    ID("id"),
    OUTCOME_VENT("vent"), 
    OUTCOME_TYPE("type"), 
    OUTCOME_SCOPE("sope"), 
    OUTCOME_RESULT("result"), 
    OUTCOME_INTEGERPARAMETER("integerparameter"), 
    OUTCOME_INTEGERPARAMETER2("integerparameter2"), 
    OUTCOME_INTEGERPARAMETER3("integerparameter3"), 
    OUTCOME_DOUBLEPARAMETER("doubleparameter"),     //--------------------------------------------------------------------------------------------
    // Instance Variables
    // --------------------------------------------------------------------------------------------    String _name;    //  --------------------------------------------------------------------------------------------
    // Constructor
    // --------------------------------------------------------------------------------------------
    
    private ColumnName(String name) {
        _name = name;
    }
    
    //--------------------------------------------------------------------------------------------
    // Instance methods
    // --------------------------------------------------------------------------------------------
    
    /**
     * @return Column name
     */
    public String getName() {
        return _name;
    }
    
    /*--------------------------------------------------------------------------------------------*/
}
这个枚举类比较困惑,如何理解 (以前没有接触过)

解决方案 »

  1.   

    另外有一个地方直接 引用上面的枚举类  ColumnName.ID
    很困惑 ,按道理应该有个地方赋予初值(static是可以不new的,
    但这里是public enum ColumnName,是否是他的特殊性?)
      

  2.   

    1.Collections.unmodifiableSet 方法是返回一个不可修改的Set
    这个方法的参数是一个Set,所以_PERMISSION是作为参数被创建的2.这就是一个很标准的枚举的写法
    不要把枚举的用法和类混了
    枚举有很多特殊的地方
    比如构造器,楼主还是去看看这些基本概念吧
      

  3.   

    这里set作为一个集合?(还是枚举)
    Set <Integer> PERMISSION_TYPE = Collections.unmodifiableSet (_PERMISSION); 
    为什么前面定义了 _PERMISSION=,之后又再次定义PERMISSION_TYPE (是否必须,为什么?) 
    _PERMISSION 和 PERMISSION_TYPE 的区别在哪里》
      

  4.   


    Set 跟枚举没关系,就是一个普通的集合PERMISSION_TYPE跟_PERMISSION没什么关系吧, 只不过前者的构造用到了后者而已
    就像
    static String s;
    static{
        s="1234";
    }
    static int i = Integer.parseInt(s);你说s跟i有啥关系?
      

  5.   

    Set 是集合阿,和枚举没有关系
    Set <Integer> 这个是泛型private static final Set <Integer> _PERMISSION= new TreeSet <Integer> (); 
    这个_PERMISSION是用new构造出来的一个普通的Setpublic static final Set <Integer> PERMISSION_TYPE = Collections.unmodifiableSet (_PERMISSION); PERMISSION_TYPE 是 通过 Collections.unmodifiableSet 方法构造的,而且是一个不可修改的Set如果你想通过Collections.unmodifiableSet 方法构造 Set,那末就要给这个方法一个参数,用你的例子,就是_PERMISSION
    当然,你也可以通过new来构造Set,这个时候就没有什莫是必须的了
      

  6.   

    感谢楼上
    但是实际上_PERMISSION 和 PERMISSION_TYPE在程序里的功能是一样的。
    和 s跟i有(2个类型不同),
    _PERMISSION 和 PERMISSION_TYPE类型一致,所以调用无所谓
      

  7.   

    虽然说你的那个_PERMISSION 和 PERMISSION_TYPE类型一致
    但是用法上有很大不同阿
    _PERMISSION是可以修改的
    PERMISSION_TYPE是不可修改的给你个简单的代码,和你的例子原理相似,你可以试一下import java.util.*;
    public class Test1 { /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub Set <Integer> s1 = new HashSet<Integer>();
    s1.add(1);
    s1.add(2);
    s1.add(3);

                    //查看s1的大小
    System.out.println("s1 size is:"+s1.size());

                    //遍历s1中的元素
    Iterator i = s1.iterator();
    while(i.hasNext()){
    System.out.println(i.next());
    }

                    //把s1当参数,创建s2
    Set s2 = Collections.unmodifiableSet(s1);
    //s2.remove(1);       //这一行在运行时会跑出异常,因为s2是不可修改的

    s1.remove(1);         //s1却可以修改                  //查看修改后s1的大小,少了一个
    System.out.println("s1 size is:"+s1.size());                //遍历s1,发现元素少了一个
    Iterator i1 = s1.iterator();
    while(i1.hasNext()){
    System.out.println(i1.next());
    }
    }
    }
      

  8.   

    感谢楼上,代码测试如你所说
     private static final Set <Integer> _PERMISSION= new TreeSet <Integer> (); 
    只是有疑问 _PERMISSION前面有修饰 private static final Set 他为什么还能在函数里修改??
     private static final Set难道咩有作用
      

  9.   

    因为Set是对象,所以即便定义为final,只是说这对象指向的引用不可以修改
    但是不代表这个引用指向的内容不可以变
    比如final Set s2 = new TreeSet();
    s2 = new HashSet(); 是不可以的,因为这样修改了s2的引用但是
    执行 s2.add();  s2.remove() 方法是可以的
    这只是修改这个引用指向的内容而已