Java新特性2 泛型
在我们开发中,经常会用到集合,我们也知道集合是用来存储元素的,但它却没有规范存储元素的具体类型,为了是我们的程序更规范化,就应当使用泛型了。
泛型是提供给javac编辑器使用的,可以限定集合中的输入类型,让编译器挡住源程序的非法输入,编辑器编译带类型说明的集合时会去除掉“类型”信息,是程序运行效率不受影响,对于参数化的泛型类型,getClass()方法的返回值和原始类型完全一样,由于编译生成的字节码会去掉泛型的类型信息,只要能跳过编译器,就可以往某个泛型集合中加入其他类型的数据,例如:用反射得到集合,在调用其add方法即可。
ArrayList<String> list1 = new ArrayList<String>();
ArrayList<Integer> list2= new ArrayList<Integer>();
System.out.println(list1.getClass() == list1.getClass());
打印true,就表示泛型只提供给编译器使用,运行期是不受影响,那我们想在list2中添加String类型的对象,如果我们直接add方法,编译器会报错。那我们怎么办?我们可以使用反射得到集合,然后调用其add方法就可以添加String类型的对象
list2.getClass().getMethod("add",
Object.class).invoke(list2, "abc");
System.out.println(collection3.get(0));
这样我们就在list2中添加了一个String类型的对象。
下面我们来简单了解一下泛型
l 术语,例如ArrayList<E>类定义和ArrayList<Integer>类定义
n 整个称为ArrayList<E>泛型类型
n ArrayList<E>中的E称为类型变量或类型参数
n 整个ArrayList<Integer>称为参数化的类型
n ArrayList<Ingerger>中的Integer称为类型参数的实例或实际类型参数
n ArrayList<Integer>中<>念着typeof
n ArrayList称为原始类型
l &nb
相关文档:
一. Proxy模式定义:
为其他对象提供一种代理以控制这个对象的访问.
二.模式解说
Proxy代理模式是一种结构型设计模式,主要解决的问题是:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上.
在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),
......
public String makeStars(int size, char ch) {
if(size < 1) {
throw new IllegalArgumentException("size must be greater than 0");
}
char[] chs = new char[size];
for(int i = 0; ......
Volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。
Java语言规范中指出:为了获得最佳速度,允许线程保存共享成员变量的私有拷贝,而且只当线程进入或者离 ......
01. 说出ArrayList,Vector的区别,HashMap和Hashtable的区别。
02. final, finally, finalize的区别。
03. abstract class和interface有什么区别?
04. 什么时候用assert。
05. GC是什么? 为什么要有GC?&nb ......
"^\d+$" //非负整数(正整数 + 0)
"^\[0-9\]*\[1-9\]\[0-9\]*$" //正整数
"^((-\d+)\|(0+))$" //非正整数(负整数 + 0)
"^-\[0-9\]*\[1-9\]\[0-9\]*$" //负整数
"^-?\d+$" //整数
"^\d+(\.\d+)?$" //非负浮点数(正浮点数 + 0)
"^((\[0-9\]+\.\[0-9\]*\[1-9\]\[0-9\]*)\|(\[0-9\]*\[1-9\]\[ ......