Javase之集合泛型
集合泛型知识
泛型
是一种把类型明确工作推迟到创建对象或者调用方法的时候才明确的特殊类型。
也称参数化类型,把类型当成参数传递。
在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之集合泛型的更多相关文章
- java 泛型深入之Set有用工具 各种集合泛型深入使用演示样例,匿名内部类、内部类应用于泛型探讨
java 泛型深入之Set有用工具 各种集合泛型深入使用演示样例,匿名内部类.内部类应用于泛型探讨 //Sets.java package org.rui.generics.set; import j ...
- reflect 反射结合集合泛型的总结
集合泛型: 可以放任何对象的 ArrayList ArrayList list = new ArrayList(); 没有限定泛型类型. list.add("lilin");l ...
- Java反射的理解(六)-- 通过反射了解集合泛型的本质
Java反射的理解(六)-- 通过反射了解集合泛型的本质 上述写了那么多,我们可能会有个疑问,为什么要用反射,步骤比我们常规的加载类操作复杂多了,别急,这个问题我最后才解答,我们先来了解集合泛型的本质 ...
- C# 数组&集合&泛型集合
一.数组 必须规定类型,必须规定长度: 1.定义 int[ ] i = new int[5]; int[] j = new int[]{1,2,3,4,5}; 2.数组的遍历: Console.Wr ...
- javase高级技术 - 泛型
在写案例之前,先简单回顾下泛型的知识 我们知道,java属于强变量语言,使用变量之前要定义,并且定义一个变量时必须要指明它的数据类型,什么样的数据类型赋给什么样的值. 所谓“泛型”,就是“宽泛的数据类 ...
- java反射--通过反射了解集合泛型的本质
通过Class,Method来认识泛型的本质 package com.reflect; import java.lang.reflect.Method; import java.util.ArrayL ...
- [Java反射基础四]通过反射了解集合泛型的本质
本文接上文"方法反射的基本操作",利用反射了解下java集合中泛型的本质 1.初始化两个集合,一个使用泛型,一个不使用 ArrayList list1 = new ArrayLis ...
- 2017年11月3日 VS三大类&数组&VS的冒泡排序&集合&泛型集合
三大类 共分为两个大类: 基本数据型&引用类型 基本数据型---值类型---整型---常用的整型: Int , 长整型: Long, 小整型: byle, 中整型 short --浮点型 - ...
- Javase之集合体系(3)之Set及其子类知识
集合体系之Set及其子类知识 Set(接口) public interface Set<E>extends Collection<E> 特点:无序(存储顺序与取出顺序不一致 ...
随机推荐
- 硬盘容量统计神器WinDirStat
最近遇到C盘快要爆满的问题,我的笔记本是128G SSD + 1t HDD,给C盘分配的空间是80G固态,由于平时疏远管理,造成了C盘臃肿,迁移一些软件,但还是没有太好的解决,这是上知乎发现有大神推荐 ...
- 03-JVM-垃圾回收算法
1.JVM内存分配与回收 1.1 对象优先在Eden区进行分配 堆中存储的对象,大多数情况下优先存储在Eden区,当Eden区存满没有足够的空间的时候,虚拟机将进行一次minorGC.当满足一定条件以 ...
- Winform中怎样在工具类中对窗体中多个控件进行操作(赋值)
场景 需求是在窗体加载完成后掉用工具类的方法,工具类中获取窗体的多个控件对象进行赋值. 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 ...
- pip方式安装Jupyter
pip方式安装Jupyter 如你的cmd命令窗口无法识别pip命令,请配置下环境变量(将python的''Scripts''文件夹路径添加至''path''变量里面). 使用以下命令更新pip和安装 ...
- Android 开发时使用 ViewPager 的问题及解决方案整理
1. ViewPager 的页面重置问题 当我们使用ViewPager控件时,假设我们的ViewPager有三页,当我们第一次启动ViewPager显示第一页的时候,ViewPager会预加载第二页, ...
- Servlet 使用介绍(1)
说明 本篇介绍java web中比较重要的一个技术:servlet.servlet是一种对用户请求动态响应的一个技术,是java web的核心一环.对于一般服务性质的纯后台服务应用而言,或许整个应用是 ...
- springboot项目创建,及运行
1. File --> new --> spring Initializr(选择jdk,和默认的url)-->next-->通过dubbo调用的服务可以直接下一步,也可以选择w ...
- Java后端,最全知识点
你可能有所感悟.零散的资料读了很多,但是很难有提升.到处是干货,但是并没什么用,简单来说就是缺乏系统化.另外,噪音太多,雷同的框架一大把,我不至于全都要去学了吧. 这里,根据基础.Java基础.Jav ...
- 27-限制容器的 Block IO
Block IO 是另一种可以限制容器使用的资源.Block IO 指的是磁盘的读写,docker 可通过设置权重.限制 bps 和 iops 的方式控制容器读写磁盘的带宽,下面分别讨论. 注:目前 ...
- dubbo解决本地开发直连
问题: 在如今的分布式项目开发中,zookeeper + dubbo是最常见的,通常的使用是用zookeeper做注册中心,dubbo做rpc,然后服务部署就可以实现相互之间的远程通信.所以开发项目时 ...