一起Talk Android吧(第二十七回:Java泛型)


各位看官们,大家好,上一回中咱们说的是Java包装类的例子,这一回咱们说的例子是Java泛型。闲话休提, 言归正转。让我们一起Talk Android吧!


看官们,我们以前介绍过重载方法,大家没有想过重载类呢?今天我们将介绍一种类似重载类的语法,它叫泛型。我们先用伪代码来演示一下什么是泛型。

class ClassName <T>{
    permission T data;
    permission T func(T value);
}

该代码中的T就是一种泛型标记,它可以是任意的类型,不过类型也不能太任性,需要类类型才可以,比如我们上一回介绍的包装类。大家可以看到类中成员的类型使用的也是泛型标记,这说明它们也可以接受任意的类型。不过有一点要强调,那就是凡是T标记的地方,类型必需保持一致。不能说标记data的T使用int类型,而且标记func的T使用String类型。

那么如何指定这个泛型标记T的具体类型呢?在实例化类的对象时指定T就可以。我们还是通过伪代码来演示:

ClassName obj = new ClassName<Long>();

大家可以看到,我们在定义时设定一个泛型标记,在使用泛型的时候才给它指定具体的类型。对比一下重载方法,重载方法在定义时就指定了多种类型。这是它们不一样的地方。不过,它们也有相同的地方:可以接收任意类型。

我们刚才也说了,泛型类似重载方法,更加准确的说,泛型可以看作是一种模板,模板定好了,里面的数据类型在使用的时候再去指定。如果有C++编程经验的人,一提到模板那么明白是怎么回事了。如果没有我们举一个现实生活中的例子。大家都使用过硬币,在制造硬币的时候会有一个模型,在模型中浇注入铁水,那么我们得到的硬币就是铁币;在模型中浇注入铜水,那么我们得到的硬币就是铜币。但是有一点可以看到,不管是铁币还是铜币,它们的大小和形状是相同的,因为它们使用了相同的模型。它们不同的地方是本身的材料。在这个例子中,制造硬币的模型好比泛型,它们都是起一个模板的使用,而制造硬币的铁水或者铜水好比数据类型(Long,String等)。

当然了,硬币的制造肯定不是这么简单,至于怎么制造,我能知道吗?我们只是举个例子让大家更加生动形象地理解泛型。再怎么生动形象,也比不上源代码,接下来我们通过具体的代码来演示如何去使用泛型。

public class GenericEx {

    public static class Generic<T>{
        private T data;

        public void func(T v){
            System.out.println("the fuc showing value: "+v);
        }

        public void setData(T data) {
            this.data = data;
        }

        public T getData() {
            return data;
        }
    }
    public static void main(String[] args) {
        Generic<Integer> genObj1 = new Generic<Integer>();
        Generic<Double> genObj2 = new Generic<Double>();
        Generic<String> genObj3 = new Generic<String>();

        genObj1.setData(6);
        System.out.println("getData: "+genObj1.getData());
        genObj1.func(7);

        genObj2.setData(6.0);
        System.out.println("getData: "+genObj2.getData());
        genObj2.func(7.0);

        genObj3.setData("this is generic example");
        System.out.println("getData: "+genObj3.getData());
        genObj3.func("the type of param is String");        
    }
}

在上面的代码中,我们在类中做了泛型标记,在实例化类的对象时才指定了具体的类型。大家可以看到同样一个类可以接收Integer,Double和String三种数据类型,当然了,它还可以接收其它的类型,我们就不一一列出了。

我们在类中使用了泛型,这样的类叫做泛型类,大家也可以在接口中使用泛型,使用泛型的接口叫做泛型接口。泛型接口的使用方法和泛型类的使用方法相同。我们就不具体说明了。

下面是程序的运行结果,请大家参考:

getData: 6
the fuc showing value: 7
getData: 6.0
the fuc showing value: 7.0
getData: this is generic example
the fuc showing value: the type of param is String

各位看官,关于Java泛型的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

talk_8

真诚赞赏,手有余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值