java怎么使用泛型_Java泛型该怎么使用

8ccaa06752fcc4cefb3799efe3448600.png

动漫人物

具体使用方法~1、定义泛型类在定义带泛型的类时,在紧跟类命之后的 < >内,指定一个或多个泛型的名字,同时也可以对泛型的取值范围进行限定,多个泛型之间用,号分隔。定义完泛型后,可以在定义位置之后的类的几乎任意地方(静态块,静态属性,静态方法除外)使用泛型,就像使用普通的类型一样。注意,父类定义的泛型不能被子类继承。例://自定义一个泛型

public class MyGenerics  {

    private T1 param1;    

    private T2 param2;    

    public T1 getParam1() {

            return param1;    

    }    

    public void setParam1(T1 param1) {

            this.param1 = param1;    

    }    

    public T2 getParam2() {        

            return param2;    

    }    

    public void setParam2(T2 param2) {

            this.param2 = param2;    

    }

}使用自定义的泛型:public static void main(String[] args) {    

    //使用自定义的泛型

    MyGenerics  myGenerics = new MyGenerics ();

    myGenerics.setParam1(1);

    myGenerics.setParam2("abc");

}注意:如果一个泛型函数在一个泛型类里面出现,最好避免在方法的泛型和类的泛型中使用同样的名字来避免混淆。对内部类也是同样。2、定义带泛型方法在定义带泛型的方法时,在紧跟可见范围修饰(例如public)之后的 < >内,指定一个或多个泛型的名字,同时也可以对泛型的取值范围进行限定,多个泛型之间用,号分隔。 定义完泛型后,可以在定义位置之后的方法的任意地方使用泛型,就像使用普通的类型一样。 例如: public  T testGenericMethodDefine(T t, S s){

       ...

 } 注意:定义带泛型的方法,主要目的是为了表达多个参数以及返回值之间的关系。3、通配符类型的通配声明:可以使用“?”通配字元,并使用extends关键字限定持有者的类型。声明一个类型时进行限定:例:public static void main(String[] args) {

    //使用’?’通配字元,并使用extends关键字限定持有者的类型

    MyGenerics  extends Object, ? extends List  > myGenerics = null;    

    //创建满足类型要求的对象    

    myGenerics = new MyGenerics  >();    

    //以下是不符合通配要求的因为HashMap没有实现List    

    //myGenerics = new MyGenerics ();    

    //给泛型的泛型赋值    

    MyGenerics3  extends Object, ? extends List  > myGenerics3 = null;    

    myGenerics3 = new MyGenerics3  >();    

    //可以设置为null    

    myGenerics3.setMyGenerics(null);

}

MyGenerics3 , ? > myGenerics3 = null;等价于:MyGenerics3  extends Object, ? extends Object > myGenerics5 = null;4、数组范型可以使用带范型参数值的类声明数组,却不可有创建数组,不能使用new关键字创建T类型的对象,而应该传递一个具体的参数类型,如下面的将编译不通过:MyGenerics  myGenerics = new MyGenerics ();例:public class MyGenerics2  {

    private T[] param1;    

    public T[] getParam1() {

            return param1;    

    }    

    public void setParam1(T[] param1) {

            this.param1 = param1;    

    }5、使用泛型的好处:如果使用了泛型,只要代码在编译时没有出现警告信息,就不会遇到运行时的ClassCastException异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值