现在的位置: 首页 > 综合 > 正文

java 泛型方法、类

2018年05月07日 ⁄ 综合 ⁄ 共 1418字 ⁄ 字号 评论关闭

1、List<?>

       List<?>
这样去定义的话和List<Object>是一个意思
,这样就可以避免到时候从list中取值使用的时候出现运行时异常,加上泛型定义之后,在往list中添加元素的时候就必须是定义的元素,否则编译会报错,例如定义List<String>a=new
ArrayList<String>();
这样的话,a中就只能添加字符串,其它类型添加不了,特别作用就是避免运行时异常。

?是泛型的通配符,代表不确定,表示没有或只有一个.

2泛型类:

public class Gen<T> {

   private T t;

 

   public Gen(T t) {

       this.t = t;

    }

   public T getT() {

       return t;

    }

   public void setT(T t) {

       this.t = t;

}

Public voidfun(T t,String name){

         …

         if (t instanceof String[]) {//数组

 

    } else if (t instanceof Map) {//Map

 

}

}

}

我们可以看到T是一个不确定的类。我们在声明、实例化Gen的时候,可以使用:

Gen<String>gen1=new Gen<String>("");

Gen<Integer>gen2=newGen<Integer>(1);

:泛型类中,泛型的类型可以有多个(使用“,”隔开);泛型的参数也可以使用extends语句(称作有界类型);

注:泛型类,是在实例化类的时候指明泛型的具体类型;泛型方法,是在调用方法的时候指明泛型的具体类型。


3、泛型方法:

public class GenMethod {
    public static <T> void display(T t) {
        System.out.println(t.getClass());
    }
}

或者


       

       说明一下,定义泛型方法时,必须在返回值前边加一个<T>,来声明这是一个泛型方法,持有一个泛型T,然后才可以用泛型T作为方法的返回值。


       Class<T>的作用就是指明泛型的具体类型,而Class<T>类型的变量c,可以用来创建泛型类的对象。


       为什么要用变量c来创建对象呢?既然是泛型方法,就代表着我们不知道具体的类型是什么,也不知道构造方法如何,因此没有办法去new一个对象,但可以利用变量c的newInstance方法去创建对象,也就是利用反射创建对象。


        泛型方法要求的参数是Class<T>类型,而Class.forName()方法的返回值也是Class<T>,因此可以用Class.forName()作为参数。其中,forName()方法中的参数是何种类型,返回的Class<T>就是何种类型。在本例中,forName()方法中传入的是User类的完整路径,因此返回的是Class<User>类型的对象,因此调用泛型方法时,变量c的类型就是Class<User>,因此泛型方法中的泛型T就被指明为User,因此变量obj的类型为User。


        当然,泛型方法不是仅仅可以有一个参数Class<T>,可以根据需要添加其他参数。
为什么要使用泛型方法呢?因为泛型类要在实例化的时候就指
明类型,如果想换一种类型,不得不重新new一次,可能不够灵活;而泛型方法可以在调用的时候指明类型,更加灵活。

抱歉!评论已关闭.