几个数据类型
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 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;
}
/*--------------------------------------------------------------------------------------------*/
}
这个枚举类比较困惑,如何理解 (以前没有接触过)
很困惑 ,按道理应该有个地方赋予初值(static是可以不new的,
但这里是public enum ColumnName,是否是他的特殊性?)
这个方法的参数是一个Set,所以_PERMISSION是作为参数被创建的2.这就是一个很标准的枚举的写法
不要把枚举的用法和类混了
枚举有很多特殊的地方
比如构造器,楼主还是去看看这些基本概念吧
Set <Integer> PERMISSION_TYPE = Collections.unmodifiableSet (_PERMISSION);
为什么前面定义了 _PERMISSION=,之后又再次定义PERMISSION_TYPE (是否必须,为什么?)
_PERMISSION 和 PERMISSION_TYPE 的区别在哪里》
Set 跟枚举没关系,就是一个普通的集合PERMISSION_TYPE跟_PERMISSION没什么关系吧, 只不过前者的构造用到了后者而已
就像
static String s;
static{
s="1234";
}
static int i = Integer.parseInt(s);你说s跟i有啥关系?
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,这个时候就没有什莫是必须的了
但是实际上_PERMISSION 和 PERMISSION_TYPE在程序里的功能是一样的。
和 s跟i有(2个类型不同),
_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());
}
}
}
private static final Set <Integer> _PERMISSION= new TreeSet <Integer> ();
只是有疑问 _PERMISSION前面有修饰 private static final Set 他为什么还能在函数里修改??
private static final Set难道咩有作用
但是不代表这个引用指向的内容不可以变
比如final Set s2 = new TreeSet();
s2 = new HashSet(); 是不可以的,因为这样修改了s2的引用但是
执行 s2.add(); s2.remove() 方法是可以的
这只是修改这个引用指向的内容而已