泛型

java泛型

一、泛型类的定义

public class Ponit {

private T x;

    public Ponit(T x, T y) {

this.x = x;

        this.y = y;

    }

public T getX() {

return x;

    }

public void setX(T x) {

this.x = x;

    }

public T getY() {

return y;

    }

public void setY(T y) {

this.y = y;

    }

private T y;

}

(2)、多泛型变量定义

上在我们只定义了一个泛型变量T,那如果我们需要传进去多个泛型要怎么办呢?

只需要在类似下面这样就可以了:

public class MorePonit <T,U,M,N>{

   private T x;

    private U name;

    private M modle;

    public U getName() {

return name;

    }

public void setName(U name) {

this.name = name;

    }

public M getModle() {

return modle;

    }

public void setModle(M modle) {

this.modle = modle;

    }

public N getNumber() {

return number;

    }

public void setNumber(N number) {

this.number = number;

    }

private N number;

    public Ponit(T x, T y) {

this.x = x;

        this.y = y;

    }

public T getX() {

return x;

    }

public void setX(T x) {

this.x = x;

    }

public T getY() {

return y;

    }

public void setY(T y) {

this.y = y;

    }

private T y;

}

二、泛型接口定义及使用

在接口上定义泛型与在类中定义泛型是一样的,代码如下:

interfaceInfo<T>{// 在接口上定义泛型 

publicTgetVar();// 定义抽象方法,抽象方法的返回值就是泛型类型 

publicvoidsetVar(T x);


class Info<U,T,K> Implimplements Info<U>{// 定义泛型接口的子类

privateU var ;

privateT x;

privateK y;

publicInfoImpl(U var){// 通过构造方法设置属性内容

this.setVar(var) ;

    }

publicvoidsetVar(U var){

this.var = var ;

    }

publicUgetVar(){

returnthis.var ;

    }

}


三、泛型函数的使用

1、上面我们讲解了类和接口的泛型使用,下面我们再说说,怎么单独在一个函数里使用泛型。比如我们在新建一个普通的类StaticFans,然后在其中定义了两个泛型函数:

public class StaticFans {

//静态函数

    public static  void StaticMethod(T a){

Log.d("harvic","StaticMethod: "+a.toString());

    }

//普通函数

    public  void OtherMethod(T a){

Log.d("harvic","OtherMethod: "+a.toString());

    }

}

上面分别是静态泛型函数和常规泛型函数的定义方法,与以往方法的唯一不同点就是在返回值前加上来表示泛型变量。其它没什么区别

使用方式如下:

/静态方法

StaticFans.StaticMethod("adfdsa");//使用方法一

StaticFans.<String>StaticMethod("adfdsa");//使用方法二

//常规方法

StaticFans staticFans =newStaticFans();

staticFans.OtherMethod(newInteger(123));//使用方法一

staticFans.<Integer>OtherMethod(newInteger(123));//使用方法二

2.有返回值的泛型方法

public static BaseParsergetParser(String json) {

try {

String s = DesUtils.decrypt(json);

        if (TextUtils.isEmpty(s)) {

return null;

        }else {

return JSON.parseObject(s, new TypeReference() {});

        }

}catch (Exception e) {

e.printStackTrace();

return null;

    }

}

public static<T> T parser(String data, Type bean) {

try {

if (TextUtils.isEmpty(data)) {

return null;

        }else {

return JSON.parseObject(data, bean);

        }

}catch (Exception e) {

e.printStackTrace();

return null;

    }

}


注意到,我们用的Class object来传递类的class对象,即我们上面提到的SuccessModel.class。

这是因为Class也是一泛型,它是传来用来装载类的class对象的,它的定义如下:

publicfinalclassClass<T>implementsSerializable{

…………

}

public static<T> T getBean(String data, Class bean) {

try {

if (TextUtils.isEmpty(data)) {

return null;

        }else {

return JSON.parseObject(data, bean);

        }

}catch (Exception e) {

e.printStackTrace();

return null;

    }

}

public static<T> List<T> getList(String data, Class bean) {

try {

if (TextUtils.isEmpty(data)) {

return null;

        }else {

return JSON.parseArray(data, bean);

        }

}catch (Exception e) {

e.printStackTrace();

return null;

    }

}


2、Java泛型编程中使用extends关键字指定泛型参数类型的上边界(后面还会讲到使用super关键字指定泛型的下边界),即泛型只能适用于extends关键字后面类或接口的子类。

Java泛型编程的边界可以是多个,使用如语法来声明,其中只能有一个是类,并且只能是extends后面的第一个为类,其他的均只能为接口(和类/接口中的extends意义不同)。

使用了泛型边界之后,泛型对象就可以使用边界对象中公共的成员变量和方法。

//静态函数

public static  <T extens Point &Serializable>  void StaticMethod(T a){

a.getModle();

    Log.d("harvic","StaticMethod: "+a.toString());

}

//多个泛型也可以绑定

public static <T extens Point &Serializable,U extends Point>   T foo(T a, U b){

…………

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、引入 1、泛型是什么 首先告诉大家ArrayList就是泛型。那ArrayList能完成哪些想不到的功能呢?先...
    ZMRWEGo阅读 3,733评论 0 0
  • 开发人员在使用泛型的时候,很容易根据自己的直觉而犯一些错误。比如一个方法如果接收List作为形式参数,那么如果尝试...
    时待吾阅读 1,073评论 0 3
  • Java 泛型 原文:http://www.runoob.com/java/java-generics.html ...
    BadGirl_TONG阅读 652评论 0 0
  • Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允...
    JWking阅读 176评论 0 1
  • 简介 泛型的意思就是参数化类型,通过使用参数化类型创建的接口、类、方法,可以指定所操作的数据类型。比如:可以使用参...
    零度沸腾_yjz阅读 3,325评论 1 15