一、Java泛型的super和extends
Java泛型中的extends和super是两个非常重要的关键字,它们可以用来限定泛型的类型范围。一个类型可以使用extends关键字限制范围上界,使用super关键字限制范围下界。
上界使用extends关键字来表示,它的作用是限定参数的类型只能是继承自某个类的子类或某个实现了某个接口的实现类。下界使用super关键字来表示,它的作用是限定参数的类型只能是某个类的父类。
二、使用extends关键字限定泛型范围
以下是使用extends限定泛型范围的示例:
public class Test {
public static void main(String[] args) {
List<? extends Number> list1 = new ArrayList<Integer>();
List<? extends Number> list2 = new ArrayList<Float>();
//List<? extends Number> list3 = new ArrayList<String>(); 错误,String不是Number的子类
}
}
这个示例中,我们使用泛型通配符(?)来表示一个不确定的类型,然后通过extends关键字来限定这个类型必须是Number的子类。在实际使用中,我们可以将实现了Number的子类,例如Integer和Float作为具体类型传递给这个泛型。
需要注意的是,使用extends关键字定义的泛型类型只能用来读取数据,不能用来写入数据,即它是只读的。
三、使用super关键字限定泛型范围
以下是使用super限定泛型范围的示例:
public class Test {
public static void main(String[] args) {
List<? super Integer> list1 = new ArrayList<Number>();
List<? super Integer> list2 = new ArrayList<Object>();
//List<? super Integer> list3 = new ArrayList<Float>(); 错误,Float不是Integer的父类
}
}
这个示例中,我们使用泛型通配符(?)来表示一个不确定的类型,然后通过super关键字来限定这个类型必须是Integer的父类。在实际使用中,我们可以将Integer和它的父类Number和Object作为具体类型传递给这个泛型。
需要注意的是,使用super关键字定义的泛型类型只能用来写入数据,不能用来读取数据,即它是只写的。
四、总结
在Java泛型中,使用extends和super关键字可以限定泛型的类型范围,从而有效地增强了泛型的类型安全性。需要注意的是,extends只能用来读取数据,super只能用来写入数据,二者不能混用。在实际使用中,我们可以根据具体情况选择使用哪个关键字。
以上是针对“一篇文章带你了解Java泛型的super和extends”的完整攻略,其中包括了使用extends和super的示例说明。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:一篇文章带你了解Java泛型的super和extends - Python技术站