java基础--泛型

563 为什么使用泛型

是一个新特性

容器 标签

为了更严格

arrayList.add(Object) 什么都能放,没有限制,危险。

把元素的类型设计成一个参数,这个类型参数叫泛型,

boolean add(E e);

这个类型参数将在使用时确定。

数组不使用泛型下的弊端

问题1:类型不安全

list.add("tom");

问题2 强转时出现classCastException

在添加时做一些检查

for(Object score:list){
    int stuScore=(Integer) score;
}

564 泛型与在file中使用泛型

集合中使用泛型

泛型是类型,使用时不能使用基本数据类型。在需要使用基本数据类型时候,使用包装类替换。

优点:编译时,进行类型检查,保证数据安全,避免了强转操作。

ArrayList<Integer> list=new ArrayList<Integer>();
list.add(78);

方式二:迭代器实现

Iterator<Integer> iterator=list.iterator();
while(iterator.hasNext()){
    int stuScore=iterator.next();
    sout(stuScore);
}

HashMap使用泛型

Map<String,Integer> map=new HashMap<String,Integer>();

//泛型嵌套

Set<Entry<String,Integer>> entry=map.entrySet();

565 泛型练习

指明后,方法的形参就发生改变

public class Employee impletements Comparable<Employee>{
    public int compareTo(Employee o){
        return 0;
    }
}

比较器只要声明中加上泛型,后面都可以用泛型。

566 自定义泛型类举例

如果定义了泛型类,实例化没有指明类的泛型,则认为此泛型类型为Object类型。

Order order=new Order();
order.setOrderT(123);
order.setOrderT("abd");

子类继承了带泛型的父类,

public class SubOrder1<T> extends Order<T> {
    //subOrder1仍然是泛型类
}
public class SubOrder extends Order<T> {
    //subOrder不再是是泛型类
}

567 自定义泛型类接口注意点

1 泛型类可能有多个参数,应将多个参宿一起放在尖括号。

4 泛型不同的引用不能相互赋值。

5 泛型不指定,将被擦除,对应的类型按object处理,但不等同;要使用,一路都使用。

8 静态方法中不能使用泛型,

reason

类的泛型是造对象时候指定,实例化时候,而静态结构要早于对象的创建。

9 异常类不能是泛型。

子类保留父类泛型

568 自定义泛型接口举例

什么是泛型方法

在方法中出现泛型结构,泛型参数与类的泛型参数没有任何关系,

泛型方法所属的类是不是泛型类都没有关系

泛型方法在调用时,指明泛型参数的类型,并非在实例化类时确定。

569 泛型类 泛型方法使用情景

泛型类使用

只能操作student

pulbic class DAO<T>{//操作表的共性操作dao
    public void add(T t){
        
    }
}

子类

public class StudentDAO extends DAO<Student>{//只能操作某个表的dao
    
}

泛型方法

//获取表中记录数,获取员工入职时间
public <E> E getValue(){
    return null;
}

570 泛型在继承方面的体现

//将子类对象赋值父类的引用

List<Object> list1=null;
List<String> list2=null;
list1=list2;//不成立,不具备子父类关系,二者并列关系

571 通配符使用

没有多态,需要写很多重载方法。

为了解决上面的问题,需要找两个并列的父类,

通配符:?

public void test(){
    
    List<Object> list1=null;
    List<String> list2=null;
    
    List<?> list=null;
    
    list=list1;
    list=list2;
}

小结

类A时类B的父类,G,G没有关系,二者的共同父类时G<?>

572 使用通配符后数据读取和写入要求

除了添加null外,对于List<?>不能向内部加数据,

获取允许,读取的数据类型为object

Object o=list.get(0);

573 有限条件通配符使用

public void test(){
    
    List<? extends Person> list1=null;
    List<? super Person> list2=null;
    
    List<Student> list3=null;
    list<Object> list5=null;
    
    list1=list5;//不成立
    //就是范围比较
    
}

理解成 super扩大范围,extends缩小范围,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值