各位看官们,大家好,上一回中咱们说的是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泛型的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!