1. 泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。
定义泛型成员变量时,则类必须实现泛型。
定义泛型方法则无所谓类是否实现泛型。
2. J2SE 1.5中提供了Varargs机制,允许直接定义能和多个实参相匹配的形参。从而,可以用一种更简单的方式,来传递个数可变的实参。
只要在一个形参的“类型”与“参数名”之间加上三个连续的“.”(即“...”,英文里的句中省略号),就可以让它和不确定个实参相匹配。而一个带有这样的形参的方法,就是一个实参个数可变的方法。
3. 代码案例
package t;
public class TDemo<T> {
private Tobj;
public void setObj(T obj) {
this.obj = obj;
}
public T getObj() {
returnobj;
}
public static <T> void fan(T... parameterTypes){
for (T classs : parameterTypes) {
System.out.println(classs.getClass().getName());
}
}
public void what(T... parameterTypes){
for (T classs : parameterTypes) {
System.out.println(classs.getClass().getName());
}
}
public void what1(Class... parameterTypes){
for (Class classs : parameterTypes) {
System.out.println(classs.getName());
}
}
public void showType(){
System.out.println(obj.getClass().getName());
}
public static void main(String[] args) {
TDemo<Integer> intDemo =new TDemo<Integer>();
intDemo.setObj(1);
System.out.println(intDemo.getObj());
intDemo.showType();
TDemo<String> strDemo = new TDemo<String>();
strDemo.setObj("1");
System.out.println(strDemo.getObj());
strDemo.showType();
Short short1 = 1;
TDemo otherDemo = new TDemo();
otherDemo.setObj(short1);
otherDemo.setObj("123");
System.out.println(otherDemo.getObj());
otherDemo.showType();
otherDemo.what(String.class,int.class,Integer.class);
fan("1",1,new Integer(1));
TDemo<ArrayList> tdemoList =new TDemo<ArrayList>();
TDemo<? extends Collection> tdemoList1 =new TDemo<ArrayList>();
TDemo<?> tdemoList2 =new TDemo<ArrayList>();
}
}
输出结果:
1
java.lang.Integer
1
java.lang.String
123
java.lang.String
java.lang.Class
java.lang.Class
java.lang.Class
java.lang.String
java.lang.Integer
java.lang.Integer