1 泛型的基本应用

//反射方式 指定类型,就不用强转
Construcctor<String> constructor = String.class.getConstructor(Stringbuffer.class);

泛型是提供给javac编译器使用的,可以限定集合输入的类型,
编译器编译带类型说明的集合时,会除掉类型信息,
返回的数据类型不用强转

2 泛型的内部原理和更深应用

ArrayList<Integer> collection1 = new ArrayList<Integer>();
collection1.getClass().getMethod("add",Objec.class).invoke(collection1,"abc");
collection1.get(0);//abc

泛型是给编译器看的
例子:
ArrayList<E> E称为参数类型或类型参数

泛型里面参数不要考虑父子关系
Collecion<Object>!= Collection<Integer>

3 泛型的通配符?

Collection<?>
使用?通配符可以引用其他参数化的类型,?通配符定义的
变量主要用作引用,可以调用与参数化无关的方法,不能调用与
参数化有关的方法。

泛型中的?通配符的扩展
限定通配符的上边界:
Vector<? extends Number> x = new Vector<Integer>();
限定通配符的下边界:
Vector<? super Integer> x = new Vector<NUmber>();

限定通配符总是包括自身

HashMap<String,Integer> maps = new HashMap<String,Integer>();
maps.put("zxx",28);
maps.put("lhm",35);
maps.put("flx",35); Set<Map.Entry<String,Intger>> entrySet = maps.entrySet();
for(Map.Entry<String,Intger> entry:entrySet){
entry.getKey()+":"+entry.getValue();
}

4 自定义泛型方法及应用

  swap(new String[]{"abc","dw","dsf"},1,2)

    public static <T> void swap(T[] a,int i,int j){
T tmp = a[i];
a[i] =a[j];
a[j] = tmp;
} Object obj ="abc";
String x2= autoConvert(obj); private static <T> T autoConvert(Object obj){
return (T)obj;
} private static <T> fillArray(T[] a, T obj){
for(int i=0;i<a.length;i++){
a[i] = obj;
}
}

泛型的应用在返回值之前用<T> 来表示
然后在实际应用中根据实际类型值进行参数应用

类泛型

public class GenericDao<E>{
public <E> void add(E x){
} public E findById(int id){
return null;
} public void delete(E obj){
} public void update(E obj){
} public Set<E> findByConditions(String where){
return null;
}
} GenericDao<ReflectPoint> dao - new GenericDao<ReflectPoint>();
dao.add(new ReflectPoint(3,3));

静态方法不能用类的泛型

5 通过反射获取泛型实际类型参数
编译完成之后去类型化

   Method applyMethod = GenericTest.class.getMethod("applyVector",Vector.class);
Type[] types = applyMethod.getGenericParameterTypes();
ParameterizeType pType = (ParameterizeType)Types[0];
pType.getRawType();
pType.getActualTypeArguments()[0]; public static void applyVector(Vector<Date> v1){ }

java基础篇5之泛型的更多相关文章

  1. [C# 基础知识梳理系列]专题六:泛型基础篇——为什么引入泛型

    引言: 前面专题主要介绍了C#1中的2个核心特性——委托和事件,然而在C# 2.0中又引入一个很重要的特性,它就是泛型,大家在平常的操作中肯定会经常碰到并使用它,如果你对于它的一些相关特性还不是很了解 ...

  2. java基础篇---I/O技术

    java基础篇---I/O技术   对于任何程序设计语言而言,输入输出(I/O)系统都是比较复杂的而且还是比较核心的.在java.io.包中提供了相关的API. java中流的概念划分 流的方向: 输 ...

  3. 金三银四跳槽季,BAT美团滴滴java面试大纲(带答案版)之一:Java基础篇

    Java基础篇: 题记:本系列文章,会尽量模拟面试现场对话情景, 用口语而非书面语 ,采用问答形式来展现.另外每一个问题都附上“延伸”,这部分内容是帮助小伙伴们更深的理解一些底层细节的补充,在面试中可 ...

  4. java基础篇---HTTP协议

    java基础篇---HTTP协议   HTTP协议一直是自己的薄弱点,也没抽太多时间去看这方面的内容,今天兴致来了就在网上搜了下关于http协议,发现有园友写了一篇非常好的博文,博文地址:(http: ...

  5. java基础篇---I/O技术(三)

    接上一篇java基础篇---I/O技术(二) Java对象的序列化和反序列化 什么叫对象的序列化和反序列化 要想完成对象的输入或输出,还必须依靠对象输出流(ObjectOutputStream)和对象 ...

  6. Java基础之多态和泛型浅析

    Java基础之多态和泛型浅析 一.前言: 楼主看了许多资料后,算是对多态和泛型有了一些浅显的理解,这里做一简单总结 二.什么是多态? 多态(Polymorphism)按字面的意思就是“多种状态”.在面 ...

  7. Java基础篇 - 强引用、弱引用、软引用和虚引用

    Java基础篇 - 强引用.弱引用.软引用和虚引用 原创零壹技术栈 最后发布于2018-09-09 08:58:21 阅读数 4936 收藏展开前言Java执行GC判断对象是否存活有两种方式其中一种是 ...

  8. java基础篇 之 构造器内部的多态行为

    java基础篇 之 构造器内部的多态行为 ​ 我们来看下下面这段代码: public class Main { public static void main(String[] args) { new ...

  9. 小白—职场之Java基础篇

    java基础篇 java基础 目录 1.java是一种什么语言,jdk,jre,jvm三者的区别 2.java 1.5之后的三大版本 3.java跨平台及其原理 4.java 语言的特点 5.什么是字 ...

随机推荐

  1. C# 调试之 Debug.WriteLine()、Trace.WriteLine()

    Trace 类 和 Debug 类的区别在于,Trace 类会同时在 Debug.Release 模式下起作用,而 Debug 只作用在 Debug 模式下. 区别: 1. 输出跟踪信息 Trace. ...

  2. python IDLE简介及使用技巧

    前言:本人环境windows 7 64位,python2.7 IDLE简介: 是python 的可视化GUI编辑器 可以逐行输入命令 可方便的进行复制.粘贴等操作 常用命令行命令: import mo ...

  3. 【Luogu】P4172水管局长(LCT)

    题目链接 有个结论是x到y的路径上最长边权值等于最小生成树上最长边权值,于是问题转化为最小生成树. 再考虑把问题反过来,删边变成加边. 于是变成动态维护最小生成树,LCT可以做到. #include& ...

  4. POJ 2686 Traveling by Stagecoach(状压二维SPFA)

    Traveling by Stagecoach Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 3407   Accepted ...

  5. [LOJ#2328]「清华集训 2017」避难所

    [LOJ#2328]「清华集训 2017」避难所 试题描述 "B君啊,你当年的伙伴都不在北京了,为什么你还在北京呢?" "大概是因为出了一些事故吧,否则这道题就不叫避难所 ...

  6. [国家集训队][bzoj 2152] 聪聪可可 [点分治]

    题面: http://www.lydsy.com/JudgeOnline/problem.php?id=2152 思路: 题目要求统计书上路径信息,想到树上分治算法 实际上这是一道点分治裸题,我就不瞎 ...

  7. vim 编辑器的使用

    相信一个linux运维人员不可能不知道vim ,下面我们一起来学习vim的日常操作吧.(不要追求多,工作中用到了再去学也不迟.) 1.vim 的几种模式 *正常模式:快捷键or命令行操作 *插入模式: ...

  8. [bzoj 3048] [Usaco2013 Jan]Cow Lineup

    [bzoj 3048] [Usaco2013 Jan]Cow Lineup Description 给你一个长度为n(1<=n<=100,000)的自然数数列,其中每一个数都小于等于10亿 ...

  9. java网络编程学习笔记(一)

    1.进程之间的通信 进程是指运行中的程序,进程的任务就是执行程序中的代码. 存在计算机网络上的两个进程只需要关注它们通信的具体内容,而不需关注消息在网络上传输的具体细节. 2.计算机网络的概念 Int ...

  10. BootLoader的一些知识

    在嵌入式操作系统中,BootLoader是在操作系统内核运行之前运行.可以初始化硬件设备.建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境.在嵌入 ...