集合泛型知识

泛型

是一种把类型明确工作推迟到创建对象或者调用方法的时候才明确的特殊类型。

也称参数化类型,把类型当成参数传递。

在jdk1.5中出现。一般来说经常在集合中使用。

  • 格式

    <数据类型>

    此处的数据类型只能是引用类型

  • 好处

    1.把运行期间的问题提前到编译时期。

    2.避免了强制类型转换。

    3.优化了程序,解决了警告。

  • 泛型产生原因

    早期,Java中使用Object来表示所有类型。向上转型没有问题,但是在向下转型的时候隐含了类型转换问题。

    也即是说,这样的程序是不安全的。所以在Java的JDK5以后引入了泛型,提高了程序安全性。

  • 泛型的应用

    • 泛型类

      把泛型定义在类中

      格式:public class 类名<泛型类型1,…>(表明可定义多个泛型类型,每个类型之间用逗号隔开。)

      public  class objectTool<T>{
      private T obj; public T getObj(){
      return obj;
      } public void setObj(){
      this.obj = obj;
      }
      }
    • 泛型方法

      把泛型定义在方法上

      格式:public <泛型类型> 返回类型 方法名(泛型类型);

      public <T> void show(T t){
      System.out.println(t);
      }
    • 泛型接口

      把泛型定义在接口上

      格式:public interface 接口名<泛型类型1,…>

      interface Inter<T>{
      public abstract void show(T t);
      } //实现接口
      //1.知道要用什么类型
      //class InterImpl implements Inter<String>{
      //
      // @Override
      // public void show(String t) {
      // System.out.println(t);
      // }
      //} //2.不知道要用什么类型
      class InterImpl<T> implements Inter<T>{ @Override
      public void show(T t) {
      System.out.println(t);
      }
      }
  • 泛型高级之通配符

    泛型如果明确的写出,则前后必须一致

    class Animal {
    
    }
    
    class Dog extends Animal{
    
    }
    
    class Cat extends Animal{
    
    }

    • 表示任意类型,如果没有明确那么就是Object及Java任意类

      Collection<?> c1 = new ArrayList<Object>();
      Collection<?> c2 = new ArrayList<Animal>();
      Collection<?> c3 = new ArrayList<Dog>();
      Collection<?> c4 = new ArrayList<Cat>();

    • ?extends E

      向下限定,E及其子类

      Collection<? extends Animal> a1 = new ArrayList<Animal>();
      Collection<? extends Animal> a2 = new ArrayList<Dog>();
      Collection<? extends Animal> a3 = new ArrayList<Cat>();

    • ?super E

      向上限定,E及其父类

      Collection<? super Animal> b1 = new ArrayList<Animal>();
      Collection<? super Animal> b2 = new ArrayList<Object>();

Javase之集合泛型的更多相关文章

  1. java 泛型深入之Set有用工具 各种集合泛型深入使用演示样例,匿名内部类、内部类应用于泛型探讨

    java 泛型深入之Set有用工具 各种集合泛型深入使用演示样例,匿名内部类.内部类应用于泛型探讨 //Sets.java package org.rui.generics.set; import j ...

  2. reflect 反射结合集合泛型的总结

    集合泛型: 可以放任何对象的 ArrayList  ArrayList list = new ArrayList();  没有限定泛型类型. list.add("lilin");l ...

  3. Java反射的理解(六)-- 通过反射了解集合泛型的本质

    Java反射的理解(六)-- 通过反射了解集合泛型的本质 上述写了那么多,我们可能会有个疑问,为什么要用反射,步骤比我们常规的加载类操作复杂多了,别急,这个问题我最后才解答,我们先来了解集合泛型的本质 ...

  4. C# 数组&集合&泛型集合

    一.数组 必须规定类型,必须规定长度:  1.定义 int[ ] i = new int[5]; int[] j = new int[]{1,2,3,4,5}; 2.数组的遍历: Console.Wr ...

  5. javase高级技术 - 泛型

    在写案例之前,先简单回顾下泛型的知识 我们知道,java属于强变量语言,使用变量之前要定义,并且定义一个变量时必须要指明它的数据类型,什么样的数据类型赋给什么样的值. 所谓“泛型”,就是“宽泛的数据类 ...

  6. java反射--通过反射了解集合泛型的本质

    通过Class,Method来认识泛型的本质 package com.reflect; import java.lang.reflect.Method; import java.util.ArrayL ...

  7. [Java反射基础四]通过反射了解集合泛型的本质

    本文接上文"方法反射的基本操作",利用反射了解下java集合中泛型的本质 1.初始化两个集合,一个使用泛型,一个不使用 ArrayList list1 = new ArrayLis ...

  8. 2017年11月3日 VS三大类&数组&VS的冒泡排序&集合&泛型集合

    三大类 共分为两个大类: 基本数据型&引用类型 基本数据型---值类型---整型---常用的整型: Int , 长整型:  Long, 小整型: byle, 中整型 short --浮点型 - ...

  9. Javase之集合体系(3)之Set及其子类知识

    集合体系之Set及其子类知识 Set(接口) public interface Set<E>extends Collection<E> ​ 特点:无序(存储顺序与取出顺序不一致 ...

随机推荐

  1. Spring Boot可执行Jar包运行原理

    目录 1. 打可执行Jar包 2. 可执行Jar包内部结构 3. JarLauncher 4. 简单总结 5. 远程调试 Spring Boot有一个很方便的功能就是可以将应用打成可执行的Jar.那么 ...

  2. c++ LeetCode(初级数组篇)十一道算法例题代码详解(一)

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/10940636.html 唉!最近忙着面试找实习,然后都是面试的很多是leetcode的算法题, ...

  3. C#基础知识1-深入理解值类型和引用类型

    C#值类型和引用类型这个概念在刚学习的时候应该就知道了.但是我们并没有深入的去理解它.越是基础知识其实才是最有用的.对代码的优化,代码质量的提升都有帮助.通过整理本文章,对很多知识也起到了巩固的作用吧 ...

  4. 手把手教你避开组件cover-view的那些坑

    腾讯位置服务基于微信提供的小程序插件能力,专注于(围绕)地图功能,打造一系列小程序插件,可以帮助开发者简单.快速的构建小程序,是您实现地图功能的最佳伙伴.目前微信小程序插件提供路线规划.地铁图.地图选 ...

  5. 使用docker-compose部署springboot项目

    由于是单机测试,没有测试多主机的跨网络分布式请求. 项目是前后分离的,所以使用nginx作为前端服务器,后端是springboot则直接基于java8环境的容器上跑,cache用的redis,mysq ...

  6. Azkaban(3.x)编译安装使用

    官网地址:https://azkaban.readthedocs.io Azkaban 有三种部署方式:单服务模式.2个服务模式.分布式多服务模式 简单实用仅需单服务模式即可 2个服务模式,需要配置m ...

  7. 搭建 Telegraf + InfluxDB + Grafana 监控遇到几个小问题

    1:如果同一台服务器上安装有多个MongoDB实例,telegraf.conf 中关于 MongoDB 如何配置?配置数据在[INPUT PLUGINS的[[inputs.mongodb]]]部分. ...

  8. php对微信支付回调处理的方法(合集)

    支付完成后,微信会把相关支付结果和用户信息发送给商户,商户需要接收处理,并返回应答. 对后台通知交互时,如果微信收到商户的应答不是成功或超时,微信认为通知失败,微信会通过一定的策略定期重新发起通知,尽 ...

  9. Linux:用户权限管理

    用户与用户组的概念 超级用户 拥有对系统的最高管理权限,默认是 root 用户 普通用户 只能对自己目录下的文件进行访问和修改,具有登录系统的权限. 虚拟用户 也叫"伪"用户,这类 ...

  10. spring mongodb用法

    A field annotated with @Id (org.springframework.data.annotation.Id) will be mapped to the '_id' fiel ...