Java之泛型

1.什么是泛型?

  • 泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。

    泛型的本质是为了参数化类型(在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型)。也就是说在泛型使用过程中,操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。

2.泛型的好处

  • 1 泛型可以增强编译时错误检测,减少因类型问题引发的运行时异常。
  • 2 泛型可以避免类型转换。
  • 3 泛型可以泛型算法,增加代码复用性。

3.泛型的分类

Java中的泛型分为三种,泛型类,泛型接口,泛型方法。

  • 泛型类:它的定义格式是class name<T1, T2, ..., Tn>,其中一种很常见的做法是定义我们的JavaBean,比如接口返回的json数据,需要和后台定义一个固定的数据返回格式,如下, 返回一个对象中包含了code和一个data, data是一个对象,我们不能固定它是什么类型,这时候就用T泛型来代替,大大增加了代码的复用性。
    public class Generics <T> {
        private T key;
        private Generics(T key){ //泛型构造方法形参key的类型也为T,T的类型由外部指定
            this.key = key;
        }
        private T getKey(T key){//泛型方法getKey的返回值类型为T,T的类型由外部指定
            return key;
        }
        public static void main(String[] args) {
            Generics g = new Generics(8);//此时T代表整型
            System.out.println(g.key);//8
            System.out.println(g.getKey(3.14));//3.14,此时TgetKey()方法里面的T就代表浮点数类型
            Generics g1 = new Generics("Str");//此时构造方法里面的T代表字符串类型
            System.out.println(g1.key);//Str
            System.out.println(g1.getKey('c'));//c,此时TgetKey()方法里面的T就代表字符类型
        }
    }
  • 泛型接口:和泛型类使用相似。
interface Intf <T> {//定义一个泛型接口
    public T re();
}
class A <T> implements Intf <T> { //A类没有传入泛型实参
    @Override
    public T re() {//默认T的返回值类型为null
        return null;
    }
}
class B implements Intf <String> {//B类传入了泛型实参为String
    private String[] fruits = new String[]{"Apple", "Banana", "Pear"};
    @Override
    public String re() {//此时T为String类型
        Random r = new Random();
        return fruits[r.nextInt(3)];//返回值为String类型
    }
}
public class Generics{
    public static void main(String[] args) {
        Intf intf = new B();
        System.out.println(intf.re());
        Intf intf1 = new A();
        System.out.println(intf1.re());
    }
}

 

  • 泛型方法: 在java中,泛型类的定义非常简单,但是泛型方法就比较复杂了。它的定义是public static <T> 返回值类型 方法名(T 参数列表)。只有在前面加<T>这种的才能算是泛型方法。

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值