Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许开发者在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。
在没有泛型的情况的下,通过对类型 Object 的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是本身就是一个安全隐患。
那么泛型的好处就是在编译的时候能够检查类型安全,并且所有的强制转换都是自动和隐式的。本质上T,E,K,V都是通配符,没啥区别,只不过是编码时的一种约定俗成的东西。比如上述代码中的 T ,我们可以换成 A-Z 之间的任何一个 字母都可以,并不会影响程序的正常运行。
但是如果换成其他的字母代替 T ,在可读性上可能会弱一些。通常情况下,T,E,K,V,?是这样约定的:?表示不确定的 java 类型。T (type) 表示具体的一个java类型。K V (key value) 分别代表java键值中的Key Value。E (element) 代表Element。
1.Java在jdk1.6之后引入了泛型,用E来表示任意类型:比如 HashMap<K,V>
用的时候 你可以将K,V 设置成任意类
HashMap<String,Integer>K,V 和那个E 一样
HashMap<String,Integer>这表示一个类 这个类有两个子变量类型是 String Integer
2.还可能是异常处理的一个参数e,try{}catch(Exception e){e.printStackTrace()}
e是(Exception e)里传的参数,是实例化异常的一个对象
e.printStackTrace()就是打印异常信息
如果(Exception e)改成了(Exception exce)的话,那后面调用方法的时候就是exce.printStackTrace()
有些人的用复制数列,算法低效、粗野浪费。
给你个、 高效、简洁而且泛型通用的全组合:
public class Test{
public static void main(String[] args) {
String[] a = { "A", "B", "C", "D", "E" }
for(int i=1i<=a.lengthi++){
System.out.println(a.length+"选"+i)
String[] res=new String[i]
combine(a,0,res,0)
}
}
final static public void combine(final Object a[], final int a_pos,final Object rs[], final int rs_pos)
{
if(rs_pos>=rs.length){
for(int i=0i<rs.lengthi++) System.out.print(rs[i]+" ")
System.out.println()
}else for(int ap=a_posap<a.lengthap++){
rs[rs_pos]=a[ap]combine(a,ap+1,rs,rs_pos+1)
}
}
}
=======
5选1
A
B
C
D
E
5选2
A B
A C
A D
A E
B C
B D
B E
C D
C E
D E
5选3
A B C
A B D
A B E
A C D
A C E
A D E
B C D
B C E
B D E
C D E
5选4
A B C D
A B C E
A B D E
A C D E
B C D E
5选5
A B C D E