java泛型的深入 泛型还可以在很多地方进行定义 泛型类 泛型方法 泛型接口 泛型的继承和通配符 泛型类练习

编程入门 行业动态 更新时间:2024-10-26 22:16:31

java泛型的深入 泛型还可以在很多地方进行定义 泛型类 泛型方法 泛型接口 泛型的继承和<a href=https://www.elefans.com/category/jswz/34/1771155.html style=通配符 泛型类练习"/>

java泛型的深入 泛型还可以在很多地方进行定义 泛型类 泛型方法 泛型接口 泛型的继承和通配符 泛型类练习

文章目录

  • 泛型的深入
  • 泛型还可以在很多地方进行定义
    • 泛型类
    • 泛型方法
    • 泛型接口
  • 泛型的继承和通配符
  • 泛型类练习
  • 总结

泛型的深入

public static void main(String[] args) {//在没有泛型的时候怎么存储数据ArrayList list=new ArrayList();list.add(1);list.add("abc");//遍历集合Iterator iterator = list.iterator();while(iterator.hasNext()){Object o = iterator.next();//多态的弊端 不能访问子类特有的功能//o.length()就会报错//由此得出如果没有给集合限定类型那么所有类型都是object类型System.out.println(o);//打印结果1//abc}}

结论:如果我们给定集合的类型 那么所有数据类型都是object
此时可以往集合添加任何的数据类型
带来一个坏处我们获取数据的时候无法用她的特有行为
所以推出泛型

以上为泛型的好处


以上为泛型的细节

泛型还可以在很多地方进行定义

泛型类

思考:并且自己写出一个泛型类

public class myArrayList <E>{Object []obj=new Object[10];int size;//表达长度  你现在存了几个元素public boolean add(E e){obj[size]=e;//相当于现在要把元素添加到数组size++;return true;//表示添加成功}public E get(int index){return (E) obj[index];}//重写toString 要求返回对象属性值1@Overridepublic String toString() {return Arrays.toString(obj);}
}

泛型方法


下面是应用场景

public class ListUtil {//这是一个工具类//所以要私有化其构造方法(不让外界创建他的对象 )private  ListUtil(){}//这个工具类的作用是让集合可以添加元素//参数1是集合  参数二是参数public static <E>void addall(ArrayList<E>list,E e1,E e2,E e3,E e4){list.add(e1);list.add(e2);list.add(e3);list.add(e4);}}


如果泛型只需要使用一次可以不用创建在整个类下(红圈的),可以单独创建在方法里形参及方法体都可以使用

代码改写 上面的有限制只能添加四个 改写下可以添加多个

public class ListUtil {//这是一个工具类//所以要私有化其构造方法(不让外界创建他的对象 )private  ListUtil(){}//这个工具类的作用是让集合可以添加元素//参数1是集合  参数二是参数public static <E>void addall(ArrayList<E>list,E...e){//他的底层是一个数组//可以用普通for遍历也可以用增强forfor (E election : e) {list.add(election);}}}

泛型接口


1:实现类给出具体的类型.在实现的地方定义泛型类型表示就只能这个类型了


以上为实现类也不明确类型

泛型的继承和通配符

泛型不具备继承性,但是数据具备继承性.

import java.util.ArrayList;public class GenericsDemo {public static void main(String[] args) {//泛型不具备继承性 但是数据具备继承性ArrayList<ye>list1 =new ArrayList<ye>();ArrayList<fu>list2=new ArrayList<fu>();ArrayList<zi>list3 =new ArrayList<zi>();method(list1);method(list2);method(list3);//这个就是泛型不具备继承性  list2 3 报错了 因为他俩是继承来的list1.add(new ye());list1.add(new fu());list1.add(new zi());//这个是数据具备继承性}public static  void method(ArrayList<ye> list){}
}
class ye{}
class fu extends ye{}
class zi extends fu{}


public class GenericsDemoTongpei {public static void main(String[] args) {//泛型不具备继承性 但是数据具备继承性ArrayList<ye> list1 =new ArrayList<ye>();ArrayList<fu>list2=new ArrayList<fu>();ArrayList<zi>list3 =new ArrayList<zi>();method(list1);method(list2);method(list3);}//这种方法不要严谨 因为它可以接收所有类//但是如果我只想限定的只接受部分类呢//这时候就用到了通配符// ? extend E表示可传递e或者e的所有的子类类型// ? super E表示传递e或者e的所有父类类型public static<E>  void method(ArrayList<E> list){}
}
class ye{}
class fu extends ye{}
class zi extends fu{}

这种方法不要严谨 因为它可以接收所有类
但是如果我只想限定的只接受部分类呢
这时候就用到了通配符
? extend E表示可传递e或者e的所有的子类类型
? super E表示传递e或者e的所有父类类型

泛型类练习

    public static void main(String[] args) {ArrayList<BosiCat>list1=new ArrayList<>();ArrayList<LihuaCat>list2=new ArrayList<>();ArrayList<TaidiDog>list3=new ArrayList<>();ArrayList<huskey>list4=new ArrayList<>();keepPet(list1);keepPet(list2);//要求1keepPet2(list3);keepPet2(list4);//要求2keepPet3(list1);keepPet3(list3);//要求3}//要求1:该方法能养所有品种的猫但不能养狗public static void keepPet(ArrayList<? extends Cat>list){}//要求2:该方法能养所有品种的狗但不能养猫public static void keepPet2(ArrayList<? extends Dog>list){}//要求3:该方法能养所有动物但是不能是其他类型public static void keepPet3(ArrayList<? extends animal>list){}

总结

更多推荐

java泛型的深入 泛型还可以在很多地方进行定义 泛型类 泛型方法 泛型接口 泛型的继承和通配符 泛型类练习

本文发布于:2023-11-16 07:19:10,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1614132.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:通配符   还可以   接口   定义   地方

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!