public static <T> void iTool(ArrayList<T> al)// 为什么这里需要在函数上声明
这个地方声明<T>表示该方法持有一个类型 T ,同时也申明是泛型方法 ,ArrayList<T> 这个则表示你要传入的集合所泛型的对象,同时也明确T是属于什么类型 ----》一般这种方式不是泛型的具体应用,不推荐
public static void print(ArrayList<? extends Person2> l)
//为什么这里不需要声明 是不是已经明确了类型就不需要声明
这个为什么不需要加<T>,首先: 此方法已经不是泛型方法 其次:? extends Person2 这表是所泛型的对象必须要是Person2 的子类对象
public static void iteratorTool(ArrayList<?> al)//?不确定传入什么参数是 用通配符? 为什么这里不需要再函数上声明 说实话我不觉得 ? 与object 有什么区别 你也可以理解为 ?就是Object 对象 所以当然没有具体对象的方法 ----------》泛型方法现在在jdk中用的非常少,一般不推荐使用泛型方法
一个简单的具体实例
class Generic {
/**
* 泛型方法
* @param <T> 声明一个泛型T
* @param c 用来创建泛型对象
* @return
* @throws InstantiationException
* @throws IllegalAccessException
*/
public <T> T getObject(Class<T> c) throws InstantiationException, IllegalAccessException{
//创建泛型对象
T t = c.newInstance();
return t;
}
}
/**
* 测试实体模型
*/
public class User {
private String uid;
private String pwd;
public String getUid() {
return uid;
}
public void setUid(String uid) {
this.uid = uid;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}
/**
* 泛型调用演示
*/
public class GenericTest {
public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException{
Generic generic = new Generic();
//调用泛型方法
Object obj = generic.getObject(Class.forName("com.cnblogs.test.User"));
//判断obj的类型是否是指定的User类型
System.out.println(obj instanceof User);
}
}
|