简述
低调做人,高调做事加油
范型入门
在我们使用集合的时候如果我们不实用范型我们存进去的数据都会被当作一个Object类来处理,编译的时候ClassCastException容易发生,因此引入范型来记录存入集合中的数据的类型。
public class ListDemo {
public static void main(String[] args){
List<String> listTest = new ArrayList<>();
listTest.add("xiaohei");
listTest.add(12);
System.out.println(listTest.get(0));
}
}
以上是范型的简单的使用 通过 尖括号内部指定数据类型为集合存放的数据的类型 ,(以上的第5行会报错,这说明通过使用范型list记住了他能存放的数据的类型)
范型类派生子类和接口
存在的意义在于我们可以在一个父类当中写一部分实现的逻辑,但是在我们使用的时候根据不同的数据类型这部分逻辑又有不同的处理,这个时候就是使用范型创建子类的时候,我们可以通过实现一个范型类,内的内部指定处理的数据的类型,执行对应的逻辑
public interface List<T> {
void add(T t);
Iterator<T> iterator();
}
public class ListImp implements List<String> {
public ListImp(){
}
@Override
public void add(String s) {
System.out.println("处理字符串类型的数据"+s);
}
@Override
public Iterator<String> iterator() {
return null;
}
public static void main(String[] args){
ListImp imp = new ListImp();
imp.add("对对小诶");
}
}
范型的通配符
在尖括号内部加问好就是指定集合内部的数据类型为通配的类型可以接收任意类型的数据。
- 通配符的简单的使用
public void test(List<?> list){
for(int i ;i<list.size();i++){
list.get(i);
}
}
- 设置通配符的上限
public void test(List<? extends Object> list ){
for(int i;i<list.size();i++){
list.toString();
}
}
进行通配符上限的设置之后可以让存放Object的集合和存放Object子类的集合建立继承的关系
-设置类型参数通配符上限
public class Applet<T extends Number>{
内部的逻辑处理
}
此处的设置使的Applet类只能接收Numner类或者是Number的子类
范型方法
范型方法的声明:
修饰符 返回值类型(通过范型来标识)方法名(参数列表(内部指定行参)){
…..方法体
}
方法内部接收不同的类型的数据进行不同的处理
public void copy(List<T> dest,List<? extends T> t){
}
范型构造器
构造器是用来创建范型类对象的,创建的格式为:
public class Student(){
public <范型> Student(T t){
}