“这是我参与8月更文挑战的第21天,活动详情查看: 8月更文挑战”
泛型
上一篇我们讲了泛型的一些优点和弊端,还有泛型通配符的使用,带大家了解了什么是泛型,这篇我们继续来深入泛型。带领大家定义和使用含有泛型的类,方法以及接口。
定义和使用含有泛型的类
我们先来看含有泛型的类是什么样的。
public class ArrayList<E>
就像这个ArrayList集合,我们知道,在创建对象时,我们需要指明泛型的类型,而ArrayList集合能够声明所有的基本数据类型。但我们如果不使用泛型,是不是就只能在创建类时,就确定类型。下面根据例子我们来看一下:
首先定义一个含有泛型的类,类似ArrayList集合。
public class GenericClass<E> {
private E name;
public GenericClass() {
}
public GenericClass(E name) {
this.name = name;
}
public E getName() {
return name;
}
public void setName(E name) {
this.name = name;
}
}
接着定义一个Test类来测试该类。
//定义一个String类型的GenericClass
GenericClass<String> g1 = new GenericClass<>("TOM");
//定义一个Integer类型的GenericClass
GenericClass<Integer> g2 = new GenericClass<>(123);
System.out.println(g1.getName());
System.out.println(g2.getName());
可以看到,我们这个类既可以使用String类型,也可以使用Integer等等其他的基本数据类型。极大的增强了复用性。
定义和使用含有泛型的方法
定义泛型的格式:
修饰符 `<泛型>` 返回值类型 方法名(参数列表(使用泛型) ){
方法体;
}
public <M> void method(M m){
System.out.println(m);
}
含有泛型的方法,在使用时确定泛型的数据类型,传递什么类型的参数,泛型就是什么类型。
下面我们来使用一下。
public class GenericMethod {
/*
创建普通实例方法
*/
public <M> void method(M m){
System.out.println(m);
}
/*
创建静态方法
*/
public static <S> void method1(S s){
System.out.println(s);
}
}
同样我们写个测试类使用一下。
GenericMethod gm = new GenericMethod();
//使用实例方法
gm.method("mm");
gm.method(1);
gm.method(true);
//使用静态方法
GenericMethod.method1("这是含有泛型静态方法");
使用含有泛型的方法,有时候可以很大程度帮助我们简化代码。
定义和使用含有泛型的接口
首先创建一个含有泛型的接口
public interface GenericInterface<I> {
public abstract void method(I i);
}
我们创建了接口之后,在使用接口时,要创建接口的实现类。
含有泛型的接口第一种使用方式:定义接口的实现类,并且指定接口的类型。
public class GenericInterfaceImpl implements GenericInterface<String>{
@Override
public void method(String s) {
}
}
可以看到,我们重写的方法也变成了指定的类型。
接着我们来看第二种使用方法:接口使用什么泛型,实现类就使用什么类型,就相当于定义了一个含有泛型的类,创建对象时确定泛型的类型。
public class GenericInterfaceImpl02<I> implements GenericInterface<I> {
@Override
public void method(I i) {
}
}
可以看到我们重写的方法参数类型也是I。然后我们来看怎么使用
GenericInterfaceImpl02<String> gii = new GenericInterfaceImpl02<>();
gii.method("和使用含有泛型的类相同");
使用是不是和创建含有泛型的类时的使用步骤相同。
写在最后
关于泛型,我们就一起学习到这里了,有兴趣的朋友可以参考上一篇的泛型一起学习,传送门。
以上内容如有不正之处,欢迎掘友们批评指正!