java 泛型

泛型

  • 所有对象底层都是Object,不能对数据进行约束;
  • 向上向下转型,太过频繁,影响效率;

泛型是给编译器的,又称参数化类型;

  • 可以在类声明时通过一个标识表示类中某个【属性,方法返回值,参数】的类型;

  • 泛型是编译阶段确定,所以不能修饰静态成员;

  • 当在声明的时候,没有传入类型的时候,默认是Object类型

  • 给泛型的数据类型,必须是引用对象;

    List<Integer> arrayList = new ArrayList<Integer>();
    //简化形式
    List<Integer> arrayList = new ArrayList<>();
    //默认Object类型
    List arrayList = new ArrayList();
    

自定义泛型:

  • 普通成员可以使用泛型【属性,方法】;

  • 静态不能使用泛型,静态是和类相关,而泛型是和对象创建相关;

  • 使用泛型的数组不能初始化,

    • 比如进行new E[num],因为不确定E的类型,无法开辟空间;
  • 泛型的类型,是在创建对象的时候确定,

  • 在创建对象时,没有指定,默认为Object;

  • 泛型方法语句:

    修饰符 返回类型 方法名(参数列表){}

  • 泛型不具有继承型;

    List<Object> arrayList = new ArrayList<String>(); //语句错误;
    
  • 泛型的通配符:

    • <?>:取出是Object类型;

          public static void func(List<?> list) {
              for (Object obj : list){
                  System.out.println(obj.getClass());
              } 
          }
      
  • <? extends AA>: 支持AA类及其子类,规定了上限;

        public static void func(List<? extends AA> list) {
            for (AA obj : list){
                System.out.println(obj.getClass());
            } 
        }
    
  • <? super AA>:支持AA类及其父类,规定了下限;

        public static void func(List<? super AA> list) {
            for (Object obj : list){
                System.out.println(obj.getClass());
            } 
        }
    
posted @   烟雨断桥  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示